Quel est le comportement de std :: sort lorsqu'il est utilisé avec ints qui sont égaux va-t-il les garder dans le même ordre ou juste faire des choses imprévisibles?std :: comportement de tri avec ints qui sont égaux
Répondre
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());
@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.
+1: c'est ce que je pensais en lisant la question :) –
A droite, ou si une commande non-triviale fournie par le foncteur de comparaison est utilisée. – vitaut
@vitaut: Quelle "commande non-triviale" pourriez-vous utiliser pour les ints qui détecteraient la non-stabilité du tri? –
Est-ce que (a/2) <(b/2) n'est pas identique à Zebrafish
@ poisson-zèbre non, considérons par exemple a = 2 et b = 3 – vitaut
ah oui. Merci. – Zebrafish