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

C++中std::map两种查找方式:contains判断vs异常捕获,哪种更高效?

C++两种map查找写法的效率对比

先明确两种写法的逻辑:

  • 写法一:先调用my_map.contains(my_key)判断key是否存在,存在则用at()返回对应值
  • 写法二:直接调用at(),通过try-catch捕获std::out_of_range异常处理key不存在的情况

效率差异核心:key存在的概率

  • 当key大概率存在时:写法一需要执行两次查找(contains和at各一次),而写法二仅需一次查找。这种场景下写法二更高效——不管是unordered_map的哈希计算,还是map的红黑树遍历,重复执行都会产生额外开销。
  • 当key大概率不存在时:写法一的contains会快速返回false,无需进入后续逻辑;但写法二会触发异常,异常的抛出与捕获本身存在栈展开、异常对象构造等额外开销,这种情况写法一效率更高。

额外更优写法推荐

如果你的需求是「存在则返回值,不存在则处理默认逻辑」,更推荐使用find方法,仅需一次查找:

auto it = my_map.find(my_key);
if (it != my_map.end()) return it->second;
// 处理key不存在的逻辑

这种写法无论key存在与否都只执行一次查找,既避免了重复操作,也没有异常开销,可读性更强。

另外要注意:异常机制的设计初衷是处理小概率异常情况,如果key不存在属于常规业务场景,使用try-catch不仅效率低下,代码逻辑也会显得生硬。

内容的提问来源于stack exchange,提问作者Grigorii Sokolik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:22:38