2011-12-28 5 views
1

GCC에서 hash_map < string, string, stringHashFunction> stringHashMap을 Ubuntu에 정의하고 stringHashFunction이 맞다고 약속합니다. 내가문자열을 문자열에 사용하는 방법 hash_map (string_hashFunction> hash_map <string, string, stringHashFunction> in Linux C++

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

컴파일러 버그를 신고 전화 hash_map 제대로

에에 문자열을 사용하는 :

error: passing ‘const __gnu_cxx::hash_map, std::basic_string, StringHashFunctionStruct>’ as ‘this’ argument of ‘_Tp& __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 >, __gnu_cxx::hash_map<_Key, _Tp, _HashFn, _EqualKey, _Alloc>::key_type = std::basic_string]’ discards qualifiers [-fpermissive]

왜 이 일이 일어날 수 있습니까? string을 hashMap에 연결하려면 어떻게해야합니까?

답변

4

[] 접근자는지도를 수정할 수 있으므로 비 const가 될 수 없습니다. http://www.cplusplus.com/reference/stl/map/operator%5B%5D/

Notice how the last access (to element 'd') inserts a new element in the map with that key and initialized to its default value (an empty string) even though it is accessed only to retrieve its value. Member function map::find does not produce this effect.

+0

대단히 감사합니다. 정말로 문제입니다. – RandyTek

3

stringHash에서 대신

찾을 사용하십시오하면 직접 const 또는 통과 중입니다/A const를 참조로 저장됩니다. operator[]은 항목을 삽입해야 할 수도 있기 때문에 비 const 함수입니다. const 해시 컨테이너에서 항목을 찾으려면 find 메소드를 사용하십시오.