我正在努力输出我拥有的 map<string, vector<string>>
的唯一值。目前,我有一个地图,并遍历它,目的是仅输出与指定键关联的唯一值。
我确实需要保持重复的值,否则我只需删除dup:)
查看此帖子,我的设置如下:
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";
}
}
}
i然后沿着:
的线进行输出"键:值 - 在索引-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])
不认为它们是相等的。
很抱歉,如果错误地发布,我将在必要时进行编辑。
感谢您的帮助
在 @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;
}
}
如果集合的大小小于向量的大小,则您知道向量具有重复。
如果您不想在任何地方重复,为什么不首先拥有std::map<std::string, std::set<std::string>>
?