Answers:
使用my_map.count( key )
; 它只能返回0或1,这实际上是您想要的布尔结果。
也可以交替使用my_map.find( key ) != my_map.end()
。
map::count
实现为find(__x) == end() ? 0 : 1;
。因为multimap
您可能会有性能方面的争论,但这不是OP的问题,我仍然更喜欢优雅。
has(k)
/ contains(k)
像地球上其他所有健全的地图类一样。界面设计不佳。find()方法过于冗长,并且该count(k)
方法绝对不是与语义平价的has(k)
。就此而言,两者都不是find(k)
。查看此问题的观看次数。
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
如果不需要插入,则可以跳过的计算。
lower_bound
基于解决方案的解决方案是过大的。我刚才提到我的回答是“为了完整性”。就像我说的那样,您的就足够了。:-)
insert
先验选择的关系。实际上,如果使用,则存在另一个差异multimap
,该lower_bound
方法将插入等效范围的开头,而普通insert
方法将添加至范围的结尾。