Я переключил свой код с 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? Нет ли методов, позволяющих получить ссылку на ключ для любого ассоциативного типа?