如何在Linux C ++中使用string to string hash_map(hash_map <string,string,=“”stringhashfunction =“”> </string,>

时间:2011-12-28 06:12:57

标签: c++ gcc

我定义了一个hash_map&lt; string,string,stringHashFunction&gt; Ubuntu中的stringHashMap和GCC。我保证stringHashFunction是正确的,因为我可以正确地在hash_map中使用string

当我打电话

string a = "sgsg";
string temp = stringHash[a];

编译器报告错误:

  

错误:将'const __gnu_cxx :: hash_map,std :: basic_string,StringHashFunctionStruct&gt;'作为'_Tp&amp;的'this'参数传递__gnu_cxx :: hash_map&lt; _Key,_Tp,_HashFn,_EqualKey,_ Alloc&gt; :: operator [](const key_type&amp;)[with _Key = std :: basic_string,_Tp = std :: basic_string,_HashFn = StringHashFunctionStruct,_EqualKey = std :: equal_to&gt;,_ Alloc = std :: allocator&gt;,__ nuu_cxx :: hash_map&lt; _Key,_Tp,_HashFn,_EqualKey,_Alloc&gt; :: key_type = std :: basic_string]'丢弃限定符[-fpermissive]

为什么会发生这种情况?我应该如何使用字符串来对应hashMap?

2 个答案:

答案 0 :(得分:4)

[]访问者可以修改地图,因此它不能是非常规的。改为使用find

来自http://www.cplusplus.com/reference/stl/map/operator%5B%5D/

  

注意上次访问(对元素&#39; d&#39;)如何插入新元素   具有该键的地图并初始化为其默认值(空   即使访问它只是为了检索它的值。会员   function map :: find不会产生这种效果。

答案 1 :(得分:3)

stringHash可以是直接const,也可以作为const引用传递/存储。 operator[]是非const函数,因为它可能需要插入一个项目。如果需要在const哈希容器中查找项目,只需使用find方法。