判断一个键是否在一个c++无序映射中最省时的方法是什么

What is the most time efficient way to tell if a key is in a c++ unordered_map?

本文关键字:一个 最省 是什么 方法 是否 判断 c++ 无序 映射      更新时间:2023-10-16

现在,如果我们说的无序映射是"mp",我判断无序映射中是否有一个键的方法是:

mp.find(key) != mp.end()

但看起来我们必须遍历mp中的所有键。这是对的吗?

如果有更好的方法来检查密钥是否在未定义的映射中?

否,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())。