我正在玩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)
但是我不太确定如何设置它,所以我可以这样做。
非常感谢任何帮助
答案 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
不会插入元素。