我有以下程序。我想要完成的是创建一个对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;
}
错误(第13行)是
错误:传递&#39; const std :: unordered_map, std :: basic_string&gt;&#39;作为&#39;这个&#39;的论点 &#39; std :: __ detail :: _ Map_base&lt; _Key,_Pair,std :: _ Select1st&lt; _Pair&gt;,true, _Hashtable&GT; :: mapped_type&安培; std :: __ detail :: _ Map_base&lt; _Key,_Pair,std :: _ Select1st&lt; _Pair&gt;,true,_Hashtable&gt; :: operator [](const _Key&amp;) [使用_Key = std :: basic_string,_Pair = std :: pair,std :: basic_string&gt;,_ Hashtable = std :: _ Hashtable,std :: pair,std :: basic_string&gt;, 的std ::分配器, std :: basic_string&gt; &gt;,std :: _ Select1st,std :: basic_string&gt; &gt;中 std :: equal_to&gt;, std :: hash&gt;, 的std :: __细节:: _ Mod_range_hashing, 的std :: __细节:: _ Default_ranged_hash, std :: __ detail :: _ Prime_rehash_policy,false,false,true&gt;, std :: __ detail :: _ Map_base&lt; _Key,_Pair,std :: _ Select1st&lt; _Pair&gt;,true, _Hashtable&gt; :: mapped_type = std :: basic_string]&#39;抛弃限定符[-fpermissive]
答案 0 :(得分:6)
unordered_map operator []是非const的,因为它在尚不存在时添加了map键。相反,你应该使用
return m.at(s);