Подтвердить что ты не робот

Использование ключа const для unordered_map

Я переключил свой код с std:: map на std:: unordered_map, где это необходимо. В std:: map я обычно пишу следующее, чтобы убедиться, что ключ не может быть изменен:

std::map<const std::string, int>

Честно говоря, я никогда не проверял, была ли эта константа какой-либо ценности. Это всегда скомпилировано и работает с g++.

Теперь, с std:: unordered_map, следующее соединение не связано с g++ 4.5.1.

std::unordered_map<const std::string, std::string> m;
m["foo"] = "bar";

с этой ссылкой:

Undefined символы: "std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const", на который ссылаются:

Исправить это просто, удалить const, но кроме того, существует ли даже точка в STL с любым из классов ассоциативных контейнеров для использования типа ключа const? Нет ли методов, позволяющих получить ссылку на ключ для любого ассоциативного типа?

4b9b3361

Ответ 1

Ассоциативные контейнеры только открывают пару (ключ, значение) как std::pair<const key_type, mapped_type>, поэтому дополнительная константа в типе ключа является излишней.