Я переключал свой код с std::map
на std::unordered_map
, где это необходимо. С std::map
я обычно пишу следующее, чтобы убедиться, что ключ не может быть изменен:
std::map<const std::string, int>
Честно говоря, я никогда не проверял, имеет ли это значение const
. Это всегда компилируется и работает с g ++.
Теперь, с std::unordered_map
, следующее не может связаться с g ++ 4.5.1.
std::unordered_map<const std::string, std::string> m;
m["foo"] = "bar";
с этой ссылкой ошибка:
Неопределенные символы:
"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
? Нет ли методов, позволяющих получить ссылку на ключ для какого-либо ассоциативного контейнера?