Как использовать строку для строки hash_map (hash_mapв Linux C ++ - PullRequest
1 голос
/ 28 декабря 2011

Я определяю hash_map stringHashMap в Ubuntu с GCC. И я обещаю, что stringHashFunction верна, потому что я могу правильно использовать строку в hash_map

Когда я звоню

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

сообщение об ошибке компилятора:

ошибка: передача 'const __gnu_cxx :: hash_map, std :: basic_string, StringHashFunctionStruct>' в качестве аргумента 'this' для _Tp & __gnu_cxx :: hash_map <_Key, _Tp, _HashFn, _EqualKey, _Alloc> :: [] const key_type &) [с _Key = std :: basic_string, _Tp = std :: basic_string, _HashFn = StringHashFunctionStruct, _EqualKey = std :: equal_to>, _Alloc = std :: allocator>, __gnu_cxx :: hash_map <_Key, _F, _EqualKey, _Alloc> :: key_type = std :: basic_string] 'отбрасывает квалификаторы [-fpermissive]

Почему это могло случиться? Как мне использовать строку для строки hashMap?

Ответы [ 2 ]

4 голосов
/ 28 декабря 2011

[] аксессор может изменить карту, следовательно, он не может быть неконстантным.вместо этого используйте find

из http://www.cplusplus.com/reference/stl/map/operator%5B%5D/

Обратите внимание, как последний доступ (к элементу 'd') вставляет новый элемент в карту с этим ключом и инициализируется значением по умолчанию(пустая строка), даже если к нему обращаются только для получения его значения.Карта функций-членов :: find не производит этого эффекта.

3 голосов
/ 28 декабря 2011

stringHash либо напрямую const, либо передан / сохранен как константная ссылка.operator[] является неконстантной функцией, потому что может потребоваться вставить элемент.Если вам нужно найти элемент в константном хеш-контейнере, просто используйте метод find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...