Ich habe meinen Code von std :: map zu std :: unordered_map, wo angemessen. Mit std :: map, ich schreibe normalerweise die folgenden nur um sicherzustellen, dass der Schlüssel nicht geändert werden kann:Verwenden einer Const-Taste für unordered_map
std::map<const std::string, int>
Ehrlich gesagt, ich nie geprüft, ob diese const von Wert war. Dies hat immer mit g ++ kompiliert und gearbeitet.
Nun, mit std :: unordered_map, die folgenden Links nicht mit g ++ 4.5.1.
std::unordered_map<const std::string, std::string> m;
m["foo"] = "bar";
mit diesem Link-Fehler:
Undefined symbols:
"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"
, referenced from:
Die Lösung ist einfach, zu entfernen const, aber abgesehen davon, gibt es auch einen Punkt in STL mit einem der assoziativen Containerklassen eine const verwenden Schlüsselart? Gibt es keine Methoden, mit denen Sie einen Verweis auf den Schlüssel für einen assoziativen Typ erhalten können?
Oder mit anderen Worten: 'std :: unordered_map' wird tun, was er will. (Sagt Jonathan und wiederholt das Offensichtliche zu den meisten.) –
Heh, ja, ich kann sehen, wie meine Antwort es erfordert, die ursprüngliche Frage zu betrachten, um sie zu verstehen :) – MSN