Namespaces
Variants

std::forward_list<T,Allocator>:: sort

From cppreference.net

void sort ( ) ;
(1) (seit C++11)
(constexpr seit C++26)
template < class Compare >
void sort ( Compare comp ) ;
(2) (seit C++11)
(constexpr seit C++26)

Sortiert die Elemente und bewahrt die Reihenfolge äquivalenter Elemente. Wenn eine Exception ausgelöst wird, ist die Reihenfolge der Elemente in * this nicht spezifiziert.

1) Elemente werden mit operator < verglichen.
2) Elemente werden mit comp verglichen.

Keine Referenzen oder Iteratoren werden ungültig.

Inhaltsverzeichnis

Parameter

comp - Vergleichsfunktionsobjekt (d.h. ein Objekt, das die Anforderungen von Compare erfüllt), das ​ true zurückgibt, wenn das erste Argument kleiner als (d.h. vor dem zweiten angeordnet ist) das zweite Argument ist.

Die Signatur der Vergleichsfunktion sollte der folgenden entsprechen:

bool cmp ( const Type1 & a, const Type2 & b ) ;

Obwohl die Signatur nicht const & benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte der Typen (möglicherweise const) Type1 und Type2 unabhängig von der Wertkategorie akzeptieren können (daher ist Type1& nicht erlaubt , ebenso wenig wie Type1 , es sei denn, für Type1 ist eine Verschiebung äquivalent zu einer Kopie (seit C++11) ).
Die Typen Type1 und Type2 müssen so beschaffen sein, dass ein Objekt vom Typ forward_list < T,Allocator > :: const_iterator dereferenziert und dann implizit in beide konvertiert werden kann. ​

Typanforderungen
-
Compare muss die Anforderungen von Compare erfüllen.

Komplexität

Gegeben N als std:: distance ( begin ( ) , end ( ) ) :

1) Ungefähr N·log(N) Vergleiche unter Verwendung von operator < .
2) Ungefähr N·log(N) Anwendungen der Vergleichsfunktion comp .

Hinweise

std::sort erfordert Random-Access-Iteratoren und kann daher nicht mit forward_list verwendet werden. Diese Funktion unterscheidet sich außerdem von std::sort dadurch, dass sie nicht erfordert, dass der Elementtyp des forward_list austauschbar ist, die Werte aller Iteratoren beibehält und eine stabile Sortierung durchführt.

Beispiel

#include <functional>
#include <iostream>
#include <forward_list>
std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list)
{
    for (const int i : list)
        ostr << ' ' << i;
    return ostr;
}
int main()
{
    std::forward_list<int> list{8, 7, 5, 9, 0, 1, 3, 2, 6, 4};
    std::cout << "initially: " << list << '\n';
    list.sort();
    std::cout << "ascending: " << list << '\n';
    list.sort(std::greater<int>());
    std::cout << "descending:" << list << '\n';
}

Ausgabe:

initially:  8 7 5 9 0 1 3 2 6 4
ascending:  0 1 2 3 4 5 6 7 8 9
descending: 9 8 7 6 5 4 3 2 1 0

Siehe auch

kehrt die Reihenfolge der Elemente um
(öffentliche Elementfunktion)