You need to enable JavaScript to run this app. C++如何将const unordered_map中的值赋值给const变量
优惠活动
大模型
产品
解决方案
定价
更多

C++如何将const unordered_map中的值赋值给const变量

C++ unordered_map const取值问题解答

1. const unordered_map的取值实现方法

有两种通用的合法取值方案:

  • 使用at()成员函数:它自带const重载,键存在时返回对应值的const引用,键不存在时抛出std::out_of_range异常,你的报错代码只需要修改对应行即可:
const int var = direct_paths.at(1)[0];
  • 使用find()成员函数:先查找键对应的迭代器,确认键存在后再取值,不会抛出异常,适合不确定键是否存在的场景:
auto iter = direct_paths.find(1);
if (iter != direct_paths.end()) {
    const int var = iter->second[0];
    cout << var;
}

2. 两者行为差异的核心原因

两种容器的operator[]设计逻辑完全不同:

unordered_map的operator[]特性

std::unordered_map的operator[]没有const重载,它的原生逻辑是:如果调用时传入的键不存在,会自动在map中插入一个默认构造的对应值,这个操作会修改map本身,所以无法通过const引用调用,自然会报丢弃const限定符的错误。

vector的operator[]特性

std::vector的operator[]提供了const重载,const版本的实现只会读取指定下标位置的元素,不会修改vector本身,所以可以被const的vector引用正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:36:06