Wenn Sie eine garantierte Bestellung benötigen, ist dies nicht die Datenstruktur für Sie. In der Tat, wenn Sie hauptsächlich Iteration machen, ist unordered_map/set
nicht die Datenstruktur für Sie, entweder.
Für die Iteration wird sich eine std::map
als die bessere Datenstruktur erweisen, da gonig von einem Knoten zum nächsten weniger algorithmisch komplex ist. Und die Reihenfolge der Iteration für die Objekte in std::map
ist garantiert durch die Spezifikation (und ist eigentlich eine definierende Eigenschaft der Struktur selbst). (Dies setzt voraus, dass Sie natürlich denselben Vergleichsoperator verwenden). In std::map
ist kein Hashing beteiligt.
Es genügt zu sagen, es klingt, als ob Sie hier den falschen Baum bellen. unordered_map
sollte im Allgemeinen für die Vorteile wie O (1) Lookup verwendet werden und nicht zum Speichern einer Liste von Objekten, die dann über sie iterieren. Es definitiv sollte nicht verwendet werden, wenn Sie versuchen, eine deterministische Reihenfolge der Iteration zu erhalten.
Die Hash-Funktion, an die Sie denken, ist nicht die endgültige Hash-Funktion, die verwendet wird. Die Bucket-Größe kann sich dynamisch ändern, und die tatsächliche Hash-Funktion wird * von Ihrer Hash-Funktion abgeleitet (vermutlich in einer Art von Modular-Arithmetik). –