2016-12-14 163 views
0

我想問一下在插入元素之前是否有任何檢查元素是否存在於unorderd_set中?根據documentation插入之前檢查unorderd_set中是否存在元素

每個元件被插入,只有當它是不等同於在容器已任何其它元素(在unordered_set元素具有唯一值)。

所以,如果我正確地得到它在我的情況:

Element *element = new Element; 
//... 
if (my_set.find (element) == my_set.end()) 
    my_set.insert(element); 

不要求 - 是否正確?如果我嘗試插入已經在集合中的元素,實際上會發生什麼。它是否與我正在做的檢查完全一樣?

+1

內閱讀文檔,盧克:http://en.cppreference.com/w/cpp/container/unordered_set/insert –

+2

此外,請自己幫忙,不要在Raw Pointers中販賣。 –

回答

2

如果您嘗試插入已經存在的值,則該集合將保持不變。該調用將返回一個包含迭代器和布爾值的對。如果項目已經存在,布爾值將爲false。

http://en.cppreference.com/w/cpp/container/unordered_set/insert

注意,在你的情況下集合包含指針,它只會阻止你有重複的指針,不重複的內容。例如,

如果您的Element對象表示元素(例如Oxygen),則它可能包含原子序號值和該名稱的字符串。如果您只想讓氧氣出現一次,一組指針不會自動執行此操作。

+1

我沒有得到你想要說的最後一句話......如果你必須有相同類型的指針(相同的地址):你的opninion中可以複製哪些內容? –

+0

@SimonKraemer如果有一些元素對象的某些方面試圖保持唯一性,那麼使用一組指針就不會那樣做。 –

+0

現在更清楚了。 +1爲更新的答案。 –

0

insert()unorderd_set做了find()來查看對象是否存在,然後插入對象。

因此,在你的代碼,他們是兩個find(),一個明確的,和其他的insert()