Espacios de nombres
Variantes
Acciones

std::list::sort

De cppreference.com
< cpp‎ | container‎ | list
 
 
 
 
void sort();
(1)
template< class Compare >
void sort( Compare comp );
(2)

Ordena los elementos en orden ascendente. El orden de elementos iguales se conserva. La primera versión utiliza el operador operator< para comparar los elementos, la segunda versión utiliza la función de comparación dada comp.

Si se lanza una excepción, el orden de los elementos en *this no está especificado.

Contenido

[editar] Parámetros

comp - Objeto función de comparación (es decir, un objeto que satisface los requisitos de Compare) que devuelve ​true si el primer argumento es menor (es decir, se ordena antes) que el segundo.

La signatura de la función de comparación debe ser equivalente a la siguiente:

 bool cmp(const Tipo1 &a, const Tipo2 &b);

Si bien la signatura no necesita tener const &, la función no debe modificar los objetos que se le pasan y debe poder aceptar todos los valores de tipo (posiblemente const) Tipo1 y Tipo2 independientemente de la categoría de valor (por lo tanto, Tipo1 & no está permitido , ni Tipo1 a menos que para Tipo1 un movimiento sea equivalente a una copia (desde C++11)).
Los tipos Tipo1 y Tipo2 deben ser tales que un objeto de tipo list<T,Allocator>::const_iterator puede ser desreferenciado y luego convertido implícitamente a ambos. ​

[editar] Valor de retorno

(Ninguno)

[editar] Complejidad

Aproximadamente N log N comparaciones, donde N es el número de elementos en la lista.

[editar] Notas

std::sort requiere iteradores de acceso aleatorio, por lo que no puede usarse con list. Esta función también difiere de std::sort en que no requiere que el tipo de elemento del contenedor list sea intercambiable, conserva los valores de todos los iteradores y realiza un ordenamiento estable.

[editar] Ejemplo

#include <iostream>
#include <functional>
#include <list>
 
std::ostream& operator<<(std::ostream& ostr, const std::list<int>& lista)
{
    for (auto &i : lista) {
        ostr << " " << i;
    }
    return ostr;
}
 
int main()
{
    std::list<int> lista = {8, 7, 5, 9, 0, 1, 3, 2, 6, 4};
 
    std::cout << "antes:       " << lista << "\n";
    lista.sort();
    std::cout << "ascendente:  " << lista << "\n";
    lista.sort(std::greater<int>());
    std::cout << "descendente: " << lista << "\n";
}

Salida:

antes:        8 7 5 9 0 1 3 2 6 4
ascendente:   0 1 2 3 4 5 6 7 8 9
descendente:  9 8 7 6 5 4 3 2 1 0