2009-10-27 6 views
5

Gewährleistet der Standard, dass sich die Reihenfolge gleicher Elemente nicht ändert (wie, vergessen Sie den Begriff dafür), indem Sie std :: sort verwenden oder muss ich eine alternative Lösung in Betracht ziehen, um dieses Ziel zu erreichen?Ändert std :: sort die relative Reihenfolge gleicher Elemente?

+5

Angesichts der Existenz von stable_sort würde ich raten "Nein" –

Antwort

18

std::sort nicht als stabil gewährleistet ist (der Begriff, den Sie zu denken versuchten). Wie Sie vermuten, ist std::stable_sort garantiert stabil. std::stable_sort bietet auch eine Garantie für Worst-Case-Komplexität, die std::sort nicht tut. std::sort ist jedoch im Durchschnitt normalerweise schneller.

+0

Beachten Sie, dass std :: sort ist im Durchschnitt schneller, obwohl . – tgamblin

+0

+! danke ... benutzte stabile Sorte – vehomzzz

+0

@Jerry fügen diese Antwort diesem Wiki hinzu (so passend): http://stackoverflow.com/questions/1596139/hidden-features-and-dark-corners-of-stl – vehomzzz

2

Nein, wenn Sie die Garantie Verwendung std :: wollen stable_sort

2

Der Begriff für das, was ist stability Sie beschreiben, enthält.

Von SGI STL docs:

Hinweis: sort ist nicht stabil sein garantiert.

Verwenden Sie stable_sort, wenn Sie dies benötigen.

3

Von C++ Referenz: here

Elemente, die zueinander gleich vergleichen würden nicht ihre ursprüngliche relative Ordnung zu halten garantiert.

Sie könnten stable_sort, wollen aber beachten Sie, dass es (im Durchschnitt) nicht so schnell ist

+0

Richtig, besser fügen Sie die "durchschnittliche" Keyword, um Verwirrung zu vermeiden. –

+0

Sieht gut aus für mich. –

+0

Der Kommentar, der darauf hingewiesen hat, wurde wahrscheinlich entfernt, so dass meine eigene ausstehende, dass ich nicht wirklich entfernen kann, da es Ihre lassen würde ... na ja :) –

Verwandte Themen