9
votes

STD :: Tri change-t-il l'ordre relatif des égaux d'égalité?

La norme garantit-elle que l'ordre des éléments égaux ne changera pas (hein, a oublié le terme pour cela) en utilisant STD :: Trier ou dois-je envisager une solution alternative pour atteindre cet objectif?


1 commentaires

Compte tenu de l'existence de stables_sort, je devinerais "non"


5 Réponses :


2
votes

Non, si vous voulez la garantie, utilisez STD :: Stable_sort


0 commentaires

2
votes

Non, il ne garantit pas explicitement cela. Si vous devez conserver une commande relative, utilisez à la place Stable_Sort.

Documentation de tri qui inclut la référence à des éléments équivalents


0 commentaires

2
votes

Le terme pour ce que vous décrivez est Stabilité .

de SGI's STL Docs :

Remarque: Trier n'est pas garanti d'être stable.

Utilisez Stable_sort si vous en avez besoin de .


0 commentaires

3
votes

de la référence C ++: ici

éléments qui compareraient les égaux aux autres ne sont pas garantis pour garder leur ordre relatif original.

vous voudrez peut-être stabilisant_sort , mais note que ce n'est pas aussi rapide (dans moyenne)


2 commentaires

De droite, mieux ajoutez le mot-clé «moyen» pour éviter toute confusion.


Le commentaire qui le pointait a probablement été supprimé, laissant ainsi mon propre pendaison, que je ne peux pas vraiment enlever puisqu'il laisserait le tien ... oh bien :)



21
votes

std :: trier n'est pas garanti d'être stable (le terme que vous essayiez de penser). Comme vous le devriez deviner, std :: stable_sort est garanti pour être stable. STD :: Stable_sort fournit également une garantie sur la complexité pire des cas, que std :: Trier ne le fait pas. std :: Trier est généralement plus rapide en moyenne cependant.


3 commentaires

Notez que STD :: Tri est plus rapide dans le cas moyen, cependant.


@ Jerry ajoutez cette réponse à ce wiki (selon le cas tel): Stackoverflow.com/questions/1596139/...


Je l'étends un peu, mais j'espère pas au point que cela devient horriblement ennuyeux ...