我有以下程序.我想要完成的是创建一个对unordered_map的可变包装器的常量引用,我可以传递它以进行只读查找.但是,由于operator []重载,我无法编译以下代码.
从这段代码中,有谁知道我做错了什么?
#include <unordered_map>
#include <string>
using std::unordered_map;
using std::string;
class M {
private:
unordered_map<string, string> m;
public:
string const& operator[](string const& s) const {
return m[s]; // line 13
}
string& operator[](string const& s) {
return m[s];
}
};
int main() {
M m;
m[string("a")] = string("answer_a");
M const& m1 = m;
string const& test = m1[string("a")];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误(第13行)是
错误:将'const std :: unordered_map,std :: basic_string>'作为'this'参数传递给'std :: __ detail :: _ Map_base <_Key,_Pair,std :: _ Select1st <_Pair>,true,_Hashtable> :: mapped_type& std :: __ detail :: _ Map_base <_Key,_Pair,std :: _ Select1st <_Pair>,true,_Hashtable> :: operator [](const _Key&)[with _Key = std :: basic_string,_Pair = std :: pair,std :: basic_string>,_ Hashtable = std :: _ Hashtable,std :: pair,std :: basic_string>,std :: allocator,std :: basic_string >>,std :: _ Select1st,std :: basic_string >>,std :: equal_to>,std :: hash>,std :: __ detail :: _ Mod_range_hashing,std :: __ detail :: _ Default_ranged_hash,std :: __ detail :: _ Prime_rehash_policy,false,false,true>,std :: __ detail :: _ Map_base <_Key, _Pair,std :: _ Select1st <_Pair>,true,_Hashtable> :: mapped_type = std :: basic_string]'丢弃限定符[-fpermissive]
unordered_map operator []是非const的,因为它在尚不存在时添加了map键.相反,你应该使用
return m.at(s);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |