You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ std::unordered_map的find()与contains()性能对比及选择

关于std::unordered_map元素检查与访问的性能对比

问题说明

需要判断std::unordered_map中是否存在指定元素并直接使用该元素,对比以下两种方案的性能差异,同时方案2的可读性更优,但疑问它是否因两次哈希查找导致性能更差。

基础代码定义

std::unordered_map<int, std::string> my_map;
int my_key;

方案1

if (const auto& iter = my_map.find(my_key); iter != my_map.end()) {
      const auto& value = iter->second;
}

方案2

if (my_map.contains(my_key)) {
      const auto& value = my_map.at(my_key);
}

性能对比分析

从性能维度看,方案1明显更优,核心原因如下:

  • 方案1仅执行一次哈希表查找:find方法通过哈希计算定位到目标元素所在的桶,找到元素后直接通过迭代器访问对应的值,全程没有重复的哈希计算和桶遍历操作。
  • 方案2会触发两次完整的哈希表查找:第一次调用contains完成存在性检查,第二次调用at会重新计算哈希、遍历桶并定位元素。哪怕哈希计算的开销不算高,两次查找带来的重复操作,在数据量较大或高频调用的场景下,性能损耗会被显著放大。

如果你的业务场景对性能要求不苛刻,方案2的可读性优势确实值得选择,代码简洁直观;但追求极致性能的场景下,方案1是更稳妥的选择。

内容的提问来源于stack exchange,提问作者Philip Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:09:52