我正在努力输出自己拥有的map<string, vector<string>>
的唯一值。现在,我有了一个地图,并对其进行迭代,目的是仅输出与指定键相关联的唯一值。
我确实需要保留重复的值,否则我将删除dups:)
查看 this post 后,我的设置如下:
for( const auto& pair : myMap ){
for( std::size_t i = 0; i < pair.second.size(); ++i ) {
bool notMatch = (pair.second[i] != pair.second[i+1]){
if (pair.first == key && notMatch){
cout << key << " : ";
cout << pair.second[i] << " - at index - " << i << "\n";
}
}
}
然后我得到一个输出:
“键:值-索引处-6”
“键:值-索引处-10”
我最初的想法是,其中一个元素可能会有一些额外的字符或某些东西,这对于为什么重复的元素不被视为相等是有意义的。
但是当做一个简单的检查-
if (pair.second[6] == pair.second[10]){
cout << "They are equal";
} else {
cout << "They are NOT equal";
}
它确认并返回两个元素实际上相等。由于元素相等,因此我很难理解为什么bool notMatch = (pair.second[i] != pair.second[i+1])
不认为它们相等。
很抱歉,如果此张贴内容有误,我会在必要时进行编辑。
感谢您的帮助
答案 0 :(得分:0)
基于@Tzalumen的注释,您可以将值插入到集合或无序集合中,并将大小与原始向量进行比较:
for(const auto& pair : myMap){
unordered_set<string> s(pair.second.begin(), pair.second.end());
if (s.size() == pair.second.size()) {
cout << "value has unique elements" << endl;
} else {
cout << "value has duplicate elements" << endl;
}
}
如果集合的大小小于矢量的大小,则说明矢量重复。
答案 1 :(得分:0)
如果您不想在任何地方重复,为什么不首先使用std::map<std::string, std::set<std::string>>
?