Bonjour à tous,
Après une petite recherche, je n'ai pas trouvé la réponse à ma question, surement peut-être parceque qu'elle est un peu étrange. Peut-être pourrez vous m'aider ? Je cherche à trier un conteneur de manière non stable, voire même la moins stable possible. Autrement dit, si j'ai les données suivantes:je voudrais que chaque tri me donne un résultat différent, soit:Code:{A, 0} {B, 1} {C, 1} {D, 2} {E, 2}
L'algorithme std::sort n'est pas stable, mais malheureusement il me retourne toujours les éléments ordonnées de la même manière. Et j'ai bien vu qu'il n'appréciait pas du tout un opérateur de comparaison de ce type :Code:ABCDE ou ABCED ou ACBDE ou ACBED
Ce qui est surement formellement interdit d'ailleurs ;)Code:
1
2
3
4
5
6
7 bool operator (const C& Left, const C& Right) { if (Left.Value == Right.Value) return (rand()%2) else return Left.Value < Right.Value; }
Du coup, existe-il une manière simple de faire ceci, plutôt que d'implémenter un algo qui permuterait les éléments égaux aléatoirement, par exemple ? J'ai tenté un std::random_shuffle avant chaque std::sort, m'a ça n'a pas l'air de modifier l'ordre final obtenu après le tri.
Merci d'avance pour toutes vos idées !