2017-05-05 1 views
-4

Mein Verständnis davon, was unordered_map bedeutet, ist, dass Einheit Wert pro Schlüssel speichert, ohne sie zu bestellen. Aber wird erwartet, dass der Anzeigenauftrag nicht erhalten bleibt?Nicht std :: unordred_map Beibehaltung Reihenfolge Reihenfolge?

Wenn ich kompilieren und ausführen:

std::unordered_map<std::string,int> temp; 
temp["Start"] = 0; 
temp["Read"] = 0; 
for (auto iter : temp) 
{ 
    std::cout << iter.first.c_str(); 
} 

Mit VS2015, es gibt

Start 
Read 

mit GCC 4.9 für Android, gibt sie:

Read 
Start 

Ist es ein Fehler, oder erwartet?

+6

Welcher Teil von "ungeordnet" ist unklar? – CoryKramer

+0

Hashing ........ – LogicStuff

+0

@CoryKramer: Ich hatte "ungeordnet" erwartet, um die Reihenfolge nicht zu ändern. Aber ich lag falsch .... – jpo38

Antwort

1

Dies wird erwartet. In der Norm gibt es keine Garantien bezüglich der Reihenfolge der Elemente in std::unordered_map.

2

Von here:

Intern werden die Elemente in der unordered_map nicht entweder in einer bestimmten Reihenfolge in Bezug sortieren ihre Schlüssel oder abgebildeten Werte, sondern in Eimer organisiert je nach ihren Hash-Werten für den schnelle ermöglichen Zugriff auf einzelne Elemente direkt nach ihren Schlüsselwerten (mit einer durchschnittlichen durchschnittlichen zeitlichen Komplexität).

Ich denke, dass es so ziemlich zusammenfasst.

Verwandte Themen