在unordered_map中哪一个更快"找到"或"在"?

abd*_*ali -2 c++ unordered-map find

我知道对于无序映射,"find"返回迭代器,而"at"返回映射值.我只是好奇哪一个更快.

Dar*_*ioP 10

你不应该根据速度在两者之间做出选择,选择更能表达你意图的方法.当你使用时,at你假设元素在地图中(否则你会得到一个例外).有了find这个情况并非如此.


Yak*_*ont 7

find更有可能是 noexcept。在某些编译器/平台中,noexcept 函数可以在代码大小上更快或更简单,因为不必设置异常设置/捕获/等。

如果找到,则丢掉,如果丢失,您将得到无法区分的结果。如果你在,然后 catch 和分支,你可能会比 find 慢(如果编译器没有优化 throw/catch 的存在)。

差异很小,因此您应该根据其他考虑选择调用哪个,除非代码对性能至关重要。在这种情况下,配置文件和奶嘴,不要依赖于理论或微基准。