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

填充含std::vector的嵌套std::map时现有逻辑是否属于过度复杂?

核心误区纠正

你混淆了std::map和std::vector的[]运算符行为:只有std::map的[]访问不存在的键时,才会自动插入默认构造的对应值;std::vector的[]仅支持访问已存在的下标,越界访问属于未定义行为,不会自动新增元素,你查阅的std::vector::operator[]官方说明是完全正确的。

你的代码确实属于过度复杂,可以大幅简化

你当前的逻辑完全可以合并为一行代码:

m_mapScheduleFutureHist[eHistAssign][strName].push_back(datAssign);

逻辑解释:

  • 内层容器WeekendFutureItemHistMap本质是std::map<CString, std::vector<COleDateTime>>,调用[strName]时如果键不存在,会自动插入一个默认构造的空std::vector<COleDateTime>,并返回该vector的引用
  • 随后调用push_back(datAssign)就可以直接把时间值添加到vector中,和你原有的if-else分支效果完全一致,还省去了一次find查找的开销,代码可读性更高

额外说明

你原有代码中已经直接使用了外层map的[eHistAssign],说明你已经在利用std::map的[]自动插入特性,内层逻辑完全可以沿用同样的规则,不需要额外做存在性判断。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:06