我发现检查重复的唯一方法是插入并检查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