正在检查与地图中的键关联的重复值?

时间:2019-03-13 18:42:13

标签: c++

我正在努力输出自己拥有的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])不认为它们相等。

很抱歉,如果此张贴内容有误,我会在必要时进行编辑。

感谢您的帮助

2 个答案:

答案 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>>