why stl baumbasierte Karte statt Hash-basierte Karte wählen?

8

Ich frage mich, warum die Karte von STL auf einem Baum basiert? Ich meine, Hash-basierte Karten scheinen beim Einfügen / Löschen effizienter zu sein oder sogar den Wert zu erhalten. Gibt es spezielle Überlegungen?

    
hongbin 04.03.2012, 15:00
quelle

1 Antwort

12

Die STL ursprünglich wählte beide. Es hatte eine Hash-Tabelle und die baumbasierte Karte.

Als es jedoch in den Standard aufgenommen wurde, wurden viele Teile entfernt, um die Aufgabe zu vereinfachen (es war einfacher, das Komitee in eine kleinere Bibliothek zu integrieren, und es erforderte weniger Arbeit, ihr Verhalten tatsächlich zu spezifizieren ).

Also wurde die Hash-Tabelle übersprungen.

Beide Datenstrukturen haben jedoch ihre Vorteile. Insbesondere ermöglicht ein Binärbaum, dass der Inhalt der Map geordnet ist (Sie können den Inhalt einer Map in sortierter Reihenfolge durchlaufen, oder Sie können nach allen Elementen fragen, die kleiner als ein bestimmtes Element sind, z Beispiel), und ich kann nur vermuten, dass diese Eigenschaft als wichtiger angesehen wurde als die Leistungsvorteile einer Hash-Karte.

In C ++ 11 wird jedoch std::unordered_map hinzugefügt, was die lange verloren gegangene Hash-Tabelle ist. Die ursprüngliche Unterlassung war einfach auf Zeitdruck zurückzuführen und möglicherweise auf die Politik des Ausschusses (die Bibliothek klein zu halten, um den Widerstand dagegen zu minimieren).

    
jalf 04.03.2012, 15:40
quelle

Tags und Links