Unordered_map:哪个更快find()或count()

unordered_map: which one is faster find() or count()?

本文关键字:find count map Unordered      更新时间:2023-10-16

找出unordered_map容器是否具有指定键的项目的最快方法是什么?

它们的性能差不多。你应该使用最能表达你想要做的事情的算法。

为了说明这一点,一般count()将使用find()来实现。例如,在libcxx中,count()被实现为return (find(__k) != end());

c++ 20通过提供contains方法结束了这个困境,该方法仍然具有相同的性能,但直接表示您的意思。

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

用于映射、集合等。find()将始终具有恒定的执行时间,因为它只计算哈希值,并返回一个指向找到的第一个元素的迭代器(如果没有找到,则返回end())。

另一方面,

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

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

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