Я переключил свой код с 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 :: allocator > const> :: operator () (std :: basic_string , std :: allocator >) const "
Исправление простое: удалить const
, но, кроме того, есть ли вообще точка в STL с любым из ассоциативных контейнерных классов использовать тип ключа const
? Нет ли методов, позволяющих получить ссылку на ключ для любого ассоциативного контейнера?