unordered_map:哪一个更快找到()或count()?

时间:2013-01-04 15:09:05

标签: c++ performance c++11 unordered-map

确定unordered_map容器是否包含指定键的项目的最快方法是什么?

2 个答案:

答案 0 :(得分:21)

他们将拥有大致相同的表现。您应该使用最能表达您要做的事情的算法。

要详细说明,通常count()将使用find()来实施。例如,在libcxx中,count()实现为return (find(__k) != end());

答案 1 :(得分:0)

find()count()适用于C ++中的许多容器。

对于map,sets等,find总是有恒定的执行时间,因为它只计算哈希值,并将迭代器返回到找到的第一个元素(end(),如果没有找到)。

另一方面,

count()具有恒定的执行时间O(e),其中e是找到所提供的密钥的次数。最糟糕的情况是所有成员都相同的集合,因此count可能具有复杂度O(n)

mapunordered_map不允许重复,因此它们的渐近运行时间会相同。

选择取决于代码中的语义。如果您只想检查密钥是否存在,可以使用count。如果您想检查密钥是否存在,并使用其值,那么请转到find,因为您已经有一个指向该元素的迭代器。