Gibt eine STL-Map beim Iterieren von begin () bis end () immer die gleiche Reihenfolge an?

8

Es scheint von meinen einfachen Tests, aber ich frage mich, ob das garantiert ist?

Gibt es Bedingungen, unter denen die Bestellung nicht garantiert werden kann?

Bearbeiten : Der Fall, an dem ich besonders interessiert bin, ist, wenn ich eine Karte mit einer großen Anzahl von Einträgen bevölke. Ist die Reihenfolge des Iterators bei mehreren Durchläufen meiner ausführbaren Datei gleich? Was passiert, wenn die Einträge in einer anderen Reihenfolge eingefügt werden?

    
Jamie Cook 11.06.2009, 03:30
quelle

5 Antworten

9

Ja, es behält eine interne Reihenfolge bei, so dass die Iteration über einen Satz, der sich nicht ändert, immer derselbe sein sollte. Von hier :

  

Intern die Elemente in der Karte   sind von unterer zu höherer Schlüssel sortiert   Wert nach einem bestimmten strengen schwach   Bestellkriterium festgelegt   Konstruktion.

    
i_am_jorf 11.06.2009, 03:34
quelle
6

std::map ist ein sortierter Container, also, ja, die Reihenfolge ist garantiert (das gleiche wie die Reihenfolge, die Sie implizit oder explizit im Konstruktor verwenden). Rechnen Sie nicht für den populären (wenn auch noch nicht-alten) hashmap - es hat in vielen Fällen sehr viele Vorteile gegenüber std::map , aber nicht eine vorhersagbare Reihenfolge der Iteration!

    
Alex Martelli 11.06.2009 03:37
quelle
1

std :: map ist eine sortierte Sammlung
und du müsstest den weniger als operator definieren Stellen Sie sich vor m ist eine Karte vom Typ T:

%Vor%     
problem_solver 11.06.2009 04:41
quelle
0

Gibt eine STL-Map die gleiche Reihenfolge mit Beginn / Ende, wenn sie unverändert ist? Ja. Wenn Sie die Karte jedoch ändern, hängen Sie nicht davon ab, dass die Reihenfolge gleich bleibt.

    
JaredPar 11.06.2009 03:32
quelle
-2

Auf demselben Datensatz unter derselben Implementierung von STL, ja. Es ist nicht garantiert, dass es bei verschiedenen Implementierungen dasselbe ist, soweit mir bekannt ist.

    
OJ. 11.06.2009 03:32
quelle

Tags und Links