判断一个键是否在一个c++无序映射中最省时的方法是什么
What is the most time efficient way to tell if a key is in a c++ unordered_map?
现在,如果我们说的无序映射是"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())。
相关文章:
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- C++ 从数组中删除一个最大值和零
- 使用数组将最后一个最大值更改为第一个最小值
- 将正数四舍五入到下一个最接近的 5 倍数
- 写一个最小的自定义操作员:std :: Sort需要std :: __ lg为我的类型解释
- 下一个最大的整数,有一些中间位与模式匹配?
- 用下一个最大的元素替换每个元素?
- 分支取决于3个数字中哪一个最小
- 建议一个最合适的设计图案
- Qt Creator 不会构建一个最小的项目 [-c 行 0: git]
- Rand从一个最大值为75的数字(36)开始时是如何工作的
- 找到下一个最大的回文数
- 将所有路径上的数字相乘,得到一个最小零数的数字
- 哪一个最快?boost::multi_array或std::vector
- 找到并返回比平衡树的q大的下一个最小值
- 请给我一些建议,如何评估一个最大的区域,涵盖所有给定的区域
- 生成下一个最大或最小的可表示浮点数,而不需要位偏移
- 我如何使用STL创建一个最大和最小堆的数据点
- 斐波那契数列c++显示一个/最大值