现在,如果我们说的unordered_map是“mp”,我告诉一个键是否在unordered_map中的方法是:
mp.find(key) != mp.end()
但看起来我们必须遍历mp中的所有键。这是对的吗?
如果有更好的方法来检查密钥是否在unordered_map中?
答案 0 :(得分:6)
不,std::unordered_map
是哈希表,std::unordered_map::find
平均是恒定时间。您不必遍历所有键。在哈希冲突的情况下,桶内可能会有一些顺序查找。
请注意,您还可以使用count
成员,这可以为您节省一个比较:
bool b = mp.count(key);
这是否更“有效”应该通过分析来确定。
C ++11§23.2.5/ 10表103 (来自N3290):
b.find(k)
...平均情况O(1),最差情况O(b.size())。