unordered_map
确定容器是否具有具有指定键的项目的最快方法是什么?
问问题
20791 次
3 回答
43
它们将具有大致相同的性能。您应该使用最能表达您正在尝试做的事情的算法。
为了详细说明,通常count()
会使用find()
. 例如,在libcxx中,count()
实现为return (find(__k) != end());
于 2013-01-04T15:15:59.657 回答
5
find()
并且count()
适用于 C++ 中的许多容器。
对于地图,集合等find()
将始终具有恒定的执行时间,因为它只是计算散列,并将迭代器返回到找到的第一个元素(end()
如果未找到)。
count()
另一方面,具有恒定的执行时间 O(e),其中 e 是找到提供的密钥的次数。最坏的情况是所有成员都相同的集合,因此count()
复杂度可能为 O(n)
map
或unordered_map
不允许重复,因此它们的渐近运行时间将相同。
选择取决于代码中的语义。如果您只想检查密钥是否存在,您可以使用count
. 如果您想检查一个键是否存在并使用它的值,那么就去吧,find
因为您已经有一个指向该元素的迭代器。
于 2017-11-14T06:56:28.590 回答
3
C++20 通过提供contains
方法结束了这种困境,它仍然具有相同的性能,但直接说出了你的意思。
于 2021-12-05T17:22:36.277 回答