我發現檢查重複的唯一方法是插入並檢查std::pair.second
的false
,但問題是,如果密鑰未使用,它仍會插入某些內容,而我想要的是map.contains(key);
函數。如何檢查std :: map是否包含沒有插入的鍵?
回答
使用my_map.count(key)
;它只能返回0或1,這實質上是你想要的布爾結果。
或者my_map.find(key) != my_map.end()
也可以。
-1:應該使用'find'。對於映射和多映射,它至少與'count'一樣高效,並且當您考慮對發現的鍵進行更改的典型需求時效率更高。 – 2011-06-03 14:26:04
@John:那種不成熟的優化。在GCC上(我確定最合理的系統),'map :: count'實現爲'find(__ x)== end()? 0:1;'。對於'multimap'你可能會有一個表現的爭論,但這不是OP的問題,我仍然更喜歡優雅。 – Potatoswatter 2011-06-03 23:09:21
不,過早優化參數僅在優化需要花費一些努力時纔有效,在這種情況下優化不需要。 – markh44 2011-11-10 10:21:02
Potatoswatter的回答是沒問題,但我更喜歡用find
或lower_bound
來代替。 lower_bound
特別有用,因爲如果您希望使用相同的鍵插入某些內容,則返回的迭代器可以隨後用於提示插入。
map<K, V>::iterator iter(my_map.lower_bound(key));
if (iter == my_map.end() || key < iter->first) { // not found
// ...
my_map.insert(iter, make_pair(key, value)); // hinted insertion
} else {
// ... use iter->second here
}
的
這與他有着微妙的不同說他正在這樣做......唯一的區別是,如果插入是不必要的,可以跳過'value'的計算。 – Potatoswatter 2010-10-07 23:23:28
當然,我知道OP不在意插入,所以基於'lower_bound'的解決方案是矯枉過正的。我剛纔提到我的答案是「完整性」;就像我說的那樣,你完全夠了。 :-) – 2010-10-07 23:29:56
是的,這是一個很好的答案,我不反對任何事情。只是指出與先驗「插入」的替代關係。實際上,如果使用'multimap'還有另一個區別,'lower_bound'方法會在等效範圍的開始處插入,而普通的'insert'方法會添加到範圍的末尾。 – Potatoswatter 2010-10-07 23:35:58
- 1. Std :: map \ std :: set包含重複鍵
- 2. std :: map插入或std :: map查找?
- 3. 如何插入到std :: map?
- 4. 檢查一個字符串是否包含重複使用std :: map
- 5. 在std :: map中插入std :: map
- 6. 如何檢查Javascript Map是否有對象鍵
- 7. 我如何檢查數組是否包含特定的鍵php
- 8. 如何檢查DataTable是否包含DataRow?
- 9. 如何檢查NSString是否包含'%'?
- 10. 如何檢查HashSet是否包含值?
- 11. 如何檢查url是否包含「main.php」
- 12. 如何檢查CGContext是否包含點?
- 13. 檢查輸入字段是否包含@
- 14. 檢查對象是否包含數組中的所有鍵
- 15. 檢查散列是否有包含一些文本的鍵
- 16. 檢查是否包含jQuery
- 17. 檢查是否行包含/ *
- 18. 如何檢查Map是否也是Struct?
- 19. 如何插入包含外鍵的表
- 20. 如何檢查輸入是否包含使用javascript的isbn
- 21. 如何檢查是否輸入包含任何特殊字符
- 22. 插入std :: Map(C++)的std :: Multimap
- 23. 檢查外鍵是插入
- 24. 檢查字符串是否只包含「 - 」而沒有別的
- 25. 如何檢查值是否已插入
- 26. 如何檢查耳機是否插入?
- 27. 檢查std :: stringstream是否包含字符 - 緩存直到\ n
- 28. ASM:檢查是否沒有按鍵
- 29. 如何檢查變量是否包含有效的IP地址
- 30. 如何檢查輸入字符串是否包含整數
可能重複[如何找到一個給定的鍵在C++的std ::地圖存在(http://stackoverflow.com/questions/1939953/how-to-find-if-a-given -key-exists-in-ac-stdmap) – OrangeDog 2014-07-24 12:34:04