2011-08-27 29 views
20

boost::unordered_map如何確定密鑰是否存在於其中?C++ boost unordered_map - 確定密鑰是否存在於容器中

boost::unordered_map<vector<int>, MyValueType> my_hash_map; 

if (my_hash_map[non-existent key] == NULL) 

以上得到編譯器錯誤「敵不過運營商‘==’......」

是,我使用自定義的值類型還是其他什麼問題?

回答

30

可以使用find方法:

if (my_hash_map.find(non-existent key) == my_hash_map.end()) 
+4

......就像任何符合標準的容器,順便說一句。 – xtofl

+0

快速跟進,是否仍然在O(1)中完成?謝謝! – gewizz

+2

我假設是這樣,因爲unordered_map是一個散列表。 –

25

exist()拼寫count()任何associative container

if (my_hash_map.count(key)) { /*key exist*/ } 

if (!my_hash_map.count(key)) { /*key does not exist*/ } 
+5

不是那麼重要,但我可以想象'count()'更昂貴,特別是如果每​​個鍵有多個值,因爲它必須實際遍歷所有這些值。 –

+0

@LukášLalinský:是的,對於'multi_ *'容器'count()'可能比'find()'具有更差的性能。 – dalle

+0

根據'my_hash_map'的大小,仍然可以選擇'.count()'方法(而不是'.find()'),因爲它正確處理了邊界情況,其中'my_hash_map'包含一個鍵/值(s)對。 – Kris

相關問題