Использование ключа const для unordered_map - PullRequest
20 голосов
/ 22 октября 2010

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

1 Ответ

21 голосов
/ 22 октября 2010

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

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