2010-11-05 11 views

Respuesta

16

std::sort no conserva el orden de los elementos equivalentes, std::stable_sort hace. Sin embargo, en caso de int s no notará la diferencia a menos que utilice algún orden no trivial como en el siguiente ejemplo:

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

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

¿No es (a/2) <(b/2) lo mismo que a Zebrafish

+0

@Zebrafish no, considere por ejemplo a = 2 yb = 3 – vitaut

+0

ah sí. Gracias. – Zebrafish

5

@vitaut es correcto. Solo quiero agregar que no notarías si se cambia el orden de los enteros iguales. Esto solo importa si ordena valores que tienen una propiedad de identificación. Por ejemplo, si almacena punteros en enteros y ordena por el valor entero.

+0

+1: eso es lo que pensé al leer la pregunta :) –

+0

Correcto, o si se usa algún tipo de ordenamiento no trivial proporcionado por el functor de comparación. – vitaut

+0

@ vitaut: ¿Qué "ordenamiento no trivial" podría usar para las operaciones que detectarían la falta de estabilidad del tipo? –

Cuestiones relacionadas