gpt4 book ai didi

c++ - 从 const unordered_map 读取对象

转载 作者:IT老高 更新时间:2023-10-28 22:10:01 26 4
gpt4 key购买 nike

为什么不允许我从常量 unordered_map 中读取对象?

const unordered_map<int, int> z;
int val = z[5]; // compile error

clang下的错误如下:

error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];

考虑到使用 const vector 的等效代码可以正常工作,我有点困惑为什么会出现这种行为。

最佳答案

表达式 z[5] 调用映射的非常量成员函数。

这是因为 map 的 operator[] 会在没有找到键的情况下插入一个新元素,所以显然它必须是非常量的。

对于 vectoroperator[] 没有插入任何内容,该元素必须已经存在(否则您会得到未定义的行为,因此等效代码将访问第 6 个元素一个空 vector ,这不好!)。

要在不添加的情况下查找 key ,请使用:

int val = 0;
auto it = z.find(5);
if (it != z.end())
val = it->second;

关于c++ - 从 const unordered_map 读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com