Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
 
void sort();
(1) (seit C++11)
template< class Compare >
void sort( Compare comp );
(2) (seit C++11)

Sortiert die Elemente und erhält die Reihenfolge äquivalenter Elemente. Keine Referenzen oder Iteratoren werden ungültig.

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

Wenn eine Ausnahme geworfen wird, ist die Reihenfolge der Elemente in *this undefiniert.

Inhalt

[bearbeiten] Parameter

comp - Vergleichsfunktions-Objekt (d.h. ein Objekt, das die Anforderungen an Compare erfüllt), das ​true zurückgibt, wenn das erste Argument *weniger* (d.h. *vorher*) als das zweite geordnet ist.

Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgendem sein

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

Obwohl die Signatur nicht unbedingt const& haben muss, darf die Funktion die übergebenen Objekte nicht verändern und muss in der Lage sein, alle Werte vom Typ (möglicherweise const) Type1 und Type2 unabhängig von der Wertkategorie zu akzeptieren (daher ist Type1& nicht erlaubt, ebenso wenig Type1, es sei denn, für Type1 ist ein Move äquivalent zu einem Kopieren(since 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 an Compare erfüllen.

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Komplexität

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

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

[bearbeiten] Anmerkungen

std::sort erfordert Zufallszugriffsiteratoren und kann daher nicht mit forward_list verwendet werden. Diese Funktion unterscheidet sich auch von std::sort dadurch, dass sie für den Elementtyp von forward_list keine Tauschbarkeit voraussetzt, die Werte aller Iteratoren beibehält und eine stabile Sortierung durchführt.

[bearbeiten] 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

[bearbeiten] Siehe auch

kehrt die Reihenfolge der Elemente um
(public member function) [edit]