Unordered_map:哪个更快find()或count()
unordered_map: which one is faster find() or count()?
找出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)
map
或unordered_map
不允许重复,因此它们的渐近运行时间是相同的。
选择取决于代码中的语义。如果你只想检查一个键是否存在,你可以使用count
。如果你想检查一个键是否存在,并使用它的值,那么选择find
,因为你已经有了一个指向该元素的迭代器。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 为什么 std::count 和 std::find 没有针对使用 memchr 进行优化?
- 如何在C++中从头文件中实现:find()和::count()
- 在键上使用 map.find() 和 count(),这是一种类对象类型
- 是否存在std::search对应的函数,就像std::count对应std::find一样
- std::unordered_map::find和count以key为参数无法编译
- Unordered_map:哪个更快find()或count()