检查与MAP中的密钥关联的重复值

  • 本文关键字:关联 密钥 MAP c++
  • 更新时间 :
  • 英文 :


我正在努力输出我拥有的 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>>

最新更新