我在玩C++ 11,我試圖向無序集添加元素,如果我已經向unordered_set添加了一個元素,我不想添加它再次(即)不再將貓添加到下面的無序集。確定在C++中是否發生了碰撞11 unordered_set
我不完全知道如何做到這一點。我知道我需要一個std::pair
等於我的s.insert(i)
但是我不太清楚如何設置這個,所以我可以做到這一點。
任何幫助,將不勝感激
我在玩C++ 11,我試圖向無序集添加元素,如果我已經向unordered_set添加了一個元素,我不想添加它再次(即)不再將貓添加到下面的無序集。確定在C++中是否發生了碰撞11 unordered_set
我不完全知道如何做到這一點。我知道我需要一個std::pair
等於我的s.insert(i)
但是我不太清楚如何設置這個,所以我可以做到這一點。
任何幫助,將不勝感激
你爲什麼要關注? std::unordered_set
只包含獨特的元素(如果它已經存在不自動加),但有一個find()
功能:
for(auto &i : myString){
if(s.insert(i).second)
//inserted
else
//already exists
}
for(auto& i: myString) {
if(s.insert(i).second) std::cout << "inserted" << std::endl
else std::cout << "dupe" << std::endl;
}
unordered_set
不會插入重複,無需檢查。
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
不會插入一個元素,如果它已經包含的元素有等效的關鍵。
如何讓它返回關於元素是否被添加的布爾值? – user2604504
@ user2604504看到編輯 – yizzlez
@ user2604504 http://en.cppreference.com/w/cpp/container/unordered_set/insert 檢查返回值,如果插入 – balki