我正在尝试通过一种方法来获取unordered_map映射值的常量引用。 unordered_map是一个类成员。但是,下面的代码不起作用,并引发标题中指出的错误。
我试图将const umap_int::mapped_type &
更改为const int &
,但该方法也不起作用。返回对简单数据类型(int,double,...)的变量的const引用的标准示例成功了。
#include <unordered_map>
using namespace std;
typedef unordered_map<int, int> umap_int;
class class_A{
public:
class_A(){
for(int k=0; k<3;++k)
M[k] = k;
}
const umap_int::mapped_type & get_M(int key) const{
return M[key];
}
private:
umap_int M;
};
int main(){
class_A A;
return 0;
}
答案 0 :(得分:1)
在const方法内部,您只能调用M
的const成员函数。两个unordered_map::operator[]
重载都是非常量-reference。因此,您不能在const get_M
中使用它。您可以从get_M
签名中删除 const 限定符,或使用具有const重载的find
,但是您需要处理传递的键不存在映射值的情况:
const umap_int::mapped_type & get_M(int key) const {
//return M[key];
auto it = M.find(key);
if (it != M.end())
return it->second;
// do sth here ...
// throw exception
// make static variable with default value which will be accessed
}