我定义了一个hash_map< string,string,stringHashFunction> Ubuntu中的stringHashMap和GCC。我保证stringHashFunction是正确的,因为我可以正确地在hash_map中使用string
当我打电话
string a = "sgsg";
string temp = stringHash[a];
编译器报告错误:
错误:将'const __gnu_cxx :: hash_map,std :: basic_string,StringHashFunctionStruct>'作为'_Tp&的'this'参数传递__gnu_cxx :: hash_map< _Key,_Tp,_HashFn,_EqualKey,_ Alloc> :: operator [](const key_type&)[with _Key = std :: basic_string,_Tp = std :: basic_string,_HashFn = StringHashFunctionStruct,_EqualKey = std :: equal_to>,_ Alloc = std :: allocator>,__ nuu_cxx :: hash_map< _Key,_Tp,_HashFn,_EqualKey,_Alloc> :: key_type = std :: basic_string]'丢弃限定符[-fpermissive]
为什么会发生这种情况?我应该如何使用字符串来对应hashMap?
答案 0 :(得分:4)
[]
访问者可以修改地图,因此它不能是非常规的。改为使用find
来自http://www.cplusplus.com/reference/stl/map/operator%5B%5D/
注意上次访问(对元素' d')如何插入新元素 具有该键的地图并初始化为其默认值(空 即使访问它只是为了检索它的值。会员 function map :: find不会产生这种效果。
答案 1 :(得分:3)
stringHash
可以是直接const
,也可以作为const引用传递/存储。 operator[]
是非const函数,因为它可能需要插入一个项目。如果需要在const哈希容器中查找项目,只需使用find
方法。