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
相关产品推荐
相关产品推荐

