确定C ++ 11 unordered_set中是否发生冲突

时间:2014-02-21 21:17:01

标签: c++ c++11

我正在玩C ++ 11,我正在尝试将元素添加到无序集中,如果我已经添加了一个元素到我的unordered_set,我不想再添加它(即)don&#39 ; t再次将cat添加到下面的无序集中。

    std::unordered_set<std::string> s;
    std::vector<std::string> myString;

    myString.push_back("cat");
    myString.push_back("dog");
    myString.push_back("bird");
    myString.push_back("cat");



for(auto &i : myString){
        //add elements from myString to unordered_set s
}

我不确定如何做到这一点。我意识到我需要std::pair等于我的s.insert(i)但是我不太确定如何设置它,所以我可以这样做。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

你为什么担心? std::unordered_set仅包含唯一元素(如果已存在则自动不添加),但有一个find()函数:

for(auto &i : myString){
    if(s.insert(i).second) 
        //inserted
    else
       //already exists
}

答案 1 :(得分:0)

for(auto& i: myString) {
    if(s.insert(i).second) std::cout << "inserted" << std::endl
    else std::cout << "dupe" << std::endl;
}

unordered_set不会插入重复项,也不需要检查。

答案 2 :(得分:0)

std::unordered_set包含一组唯一对象。

这意味着它可以包含重复项(如果operator==返回true,则认为两个元素是等效的。)

示例:

std::unordered_set<std::string> s;
s.emplace("cat");
s.emplace("cat");
s.emplace("cat");

// At this point s only contains one std::string object.

要从std::vector添加唯一商品,只需使用std::vector::insert,如下所示:

s.insert(std::begin(vec), std::end(vec));

如果元素已包含具有等效键的元素,则std::unordered_set不会插入元素。