C ++ Hash-Funktion für String in unordered_map
Es scheint, als ob C++ nicht über eine hash-Funktion für strings, die in der standard-Bibliothek. Ist das wahr?
Was ist ein Beispiel mit einem string als Schlüssel in einer unordered_map, die mit jedem c++ - compiler?
InformationsquelleAutor der Frage MirroredFate | 2013-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
C++ STL bietet eine Vorlage Spezialisierungen von
std::hash
für die verschiedenen string-Klassen. Sie konnte nur angebenstd::string
als key-Typ fürstd::unordered_map
:InformationsquelleAutor der Antwort soon
Lief ich in diese heute (eigentlich mit
wstring
nichtstring
aber es ist der gleiche deal):wstring
wie ein Schlüssel in einunordered_map
erzeugt eine Fehlermeldung über keine hash-Funktion zur Verfügung stehen für diesen Typ.Die Lösung war für mich hinzufügen:
Ob Sie es glauben oder nicht, ohne die include-ich hatte immer noch die wstring-Typ verfügbar, aber offensichtlich NICHT die Nebenfunktionen wie der Hashwert. Einfach hinzufügen die include oben fixiert.
InformationsquelleAutor der Antwort Dave
Tatsächlich, es ist
std::hash<std::string>
Aber es ist, wie Sie verwenden können, eine andere hash-Funktion:
InformationsquelleAutor der Antwort RiaD
Wenn Sie eine
CustomType
und Sie wollen, stecken Sie in das STL-Infrastruktur das ist, was Sie tun könnten.Wenn Sie möchten, erstellen Sie sagen, ein
std::unordered_map<CustomType>
der STL finden diehash
undequal_to
Funktionen, ohne dass Sie etwas dafür tun, mehr mit der Vorlage. Dies ist, wie ich mag zu schreiben, meine benutzerdefinierte Gleichheit comparer, dass die Unterstützung ungeordneten Datenstrukturen.InformationsquelleAutor der Antwort John Leidegren
In meinem Fall war es wirklich Ablenkung.
Hatte ich eine Art X, für die ich umgesetzt habe hashing für const& X eine verwertet es irgendwo mit
Dann wollte ich eine weitere Karte, die Schlüssel sind von der Art
X
und Tat:Beachten Sie die MANGEL von
const
auf den zweiten Fall.InformationsquelleAutor der Antwort sergiol