2010-11-05 5 views

Répondre

16

std::sort ne conserve pas l'ordre des éléments équivalents, std::stable_sort fait. Toutefois, en cas de int s vous ne remarquerez pas la différence sauf si vous utilisez une commande non négligeable comme dans l'exemple suivant:

struct half_less 
{ 
    bool operator()(int a, int b) const { return (a/2) < (b/2); } 
}; 

std::sort(begin, end, half_less()); 
+0

Est-ce que (a/2) <(b/2) n'est pas identique à Zebrafish

+0

@ poisson-zèbre non, considérons par exemple a = 2 et b = 3 – vitaut

+0

ah oui. Merci. – Zebrafish

5

@vitaut est juste. Je veux juste ajouter que vous ne remarquerez pas si l'ordre des entiers égaux est changé. Cela n'a d'importance que si vous triez des valeurs qui ont une propriété d'identification. Par exemple si vous stockez des pointeurs sur des entiers et effectuez un tri par la valeur entière.

+0

+1: c'est ce que je pensais en lisant la question :) –

+0

A droite, ou si une commande non-triviale fournie par le foncteur de comparaison est utilisée. – vitaut

+0

@vitaut: Quelle "commande non-triviale" pourriez-vous utiliser pour les ints qui détecteraient la non-stabilité du tri? –

Questions connexes