Antworten:
Hash
ist eine extrem schlecht benannte Datenstruktur, bei der der Programmierer die Schnittstelle mit der Implementierung verwechselt hat ( und zu faul war, um den vollständigen Namen zu schreiben, dh HashTable
stattdessen auf eine Abkürzung zurückzugreifen Hash
).
Dictionary
ist der „richtige“ Name der Schnittstelle (= ADT ), dh ein assoziativer Container, der (normalerweise eindeutige) Schlüssel (nicht unbedingt eindeutigen) Werten zuordnet.
Eine Hash-Tabelle ist eine mögliche Implementierung eines solchen Wörterbuchs, das (in Bezug auf die Laufzeit) recht gute Zugriffseigenschaften bietet und daher häufig die Standardimplementierung ist.
Eine solche Implementierung hat zwei wichtige Eigenschaften:
(Wenn ein Schlüssel hashbar sein soll, können wir einen numerischen Wert aus einem Schlüssel berechnen, der anschließend als Index in einem Array verwendet wird.)
Es gibt alternative Implementierungen der Wörterbuchdatenstruktur, die den Schlüsseln eine Reihenfolge auferlegen - dies wird häufig als sortiertes Wörterbuch bezeichnet (und wird normalerweise in Form eines Suchbaums implementiert, obwohl andere effiziente Implementierungen existieren).
Zusammenfassend lässt sich sagen, dass ein Wörterbuch ein ADT ist, das Schlüssel zu Werten zuordnet. Es gibt mehrere mögliche Implementierungen dieses ADT, von denen die Hash-Tabelle eine ist. Hash
ist eine Fehlbezeichnung, entspricht aber im Kontext einem Wörterbuch, das in Form einer Hash-Tabelle implementiert ist.
Hash
Klasse mit einer Hash-Tabelle zu implementieren , da Ruby 1.9 die Hash
Einfügereihenfolge beibehält, während dies in einer Hash-Tabelle nicht der Fall ist. In Ruby 1.9 Hash
spiegelt der Name also nicht einmal mehr die Implementierung wider.
"Dictionary" heißt das Konzept. Eine Hash-Tabelle ist eine mögliche Implementierung.
Ein Wörterbuch ist der Sammelbegriff für jede Datenstrukturimplementierung, die für schnelle Suchvorgänge / Einfügungen verwendet wird. Dies kann unter Verwendung einer Vielzahl von Datenstrukturen wie Hash-Tabellen, Überspringlisten, RB-Baum usw. erreicht / implementiert werden. Eine Hash-Tabelle ist eine spezifische Datenstruktur, die für viele Zwecke nützlich ist, einschließlich der Implementierung eines Wörterbuchs.
Ein Wörterbuch verwendet einen Schlüssel, um auf den Wert direkt in einem assoziativen Array zu verweisen .
dh (KEY => VALUE)
Ein Hash wird häufiger als eine Hash-Tabelle beschrieben, die eine Hash-Funktion verwendet , um die Position im Speicher (oder einfacher ein Array) zu berechnen, an der sich der Wert befindet. Der Hash nimmt den KEY als Eingabe und gibt einen Wert als Ausgabe aus. Stecken Sie dann diesen Wert in den Speicher- oder Array-Index.
dh KEY => HASH FUNCTION => VALUE
Ich denke, einer ist direkt, der andere nicht. Hash-Funktionen sind möglicherweise auch nicht perfekt und liefern manchmal einen Index, der auf den falschen Wert verweist. Aber das kann korrigiert werden.
Bester Ort zum Schauen: Wikipedia ( assoziatives Array und Hash-Tabelle )
unordered_map
zeigen, was sie tun und nicht, was sie sind.