Der Unterschied zwischen hash_map und unordered_map?
-
22-07-2019 - |
Frage
Ich habe kürzlich entdeckt, dass die Umsetzung der Hash-Karte in C ++ wird unordered_map
aufgerufen werden.
Als ich aufblickte, warum sie waren einfach nicht hash_map
verwenden, entdeckte ich, dass offenbar Kompatibilitätsprobleme bei der Umsetzung von hash_map
gibt, die Entschlüsse (weitere Informationen unordered_map
hier ).
Die Wiki-Seite gibt nicht viel mehr Informationen, damit ich mich gefragt, ob jemand einige der Probleme mit hash_map
wußte, dass Entschlüsse unordered_map
.
Lösung
Da es keine Hash-Tabelle in der C ++ Standardbibliothek definiert war, verschiedene Implementierer der Standardbibliotheken würden eine Nicht-Standard-Hash-Tabelle häufig genannt hash_map
bieten. Da diese Implementierungen wurden nach einem Standard nicht geschrieben sie alle feinen Unterschiede in Funktionalität und Leistung garantiert hatte.
Beginnend mit C 11 ++ eine Hash-Tabelle Implementierung wurde hinzugefügt die C ++ Standard-Bibliothek-Standard. Es wurde beschlossen, einen anderen Namen zu verwenden, um die Klasse Kollisionen zu verhindern, mit diesen Nicht-Standard-Implementierungen und eine versehentliche Verwendung der neuen Klasse zu verhindern, dass von den Entwicklern, die in ihrem Code hash_table
hatte.
Der gewählte alternative Name ist unordered_map
, die wirklich mehr beschreibend ist, wie es in der Klasse der Karte-Schnittstelle und die ungeordneten Natur ihrer Elemente hindeutet.