std:: is_sorted
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
ForwardIt
>
bool is_sorted ( ForwardIt first, ForwardIt last ) ; |
(1) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt
>
bool
is_sorted
(
ExecutionPolicy
&&
policy,
|
(2) | (seit C++17) |
|
template
<
class
ForwardIt,
class
Compare
>
bool is_sorted ( ForwardIt first, ForwardIt last, Compare comp ) ; |
(3) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt,
class
Compare
>
bool
is_sorted
(
ExecutionPolicy
&&
policy,
|
(4) | (seit C++17) |
Prüft, ob die Elemente im Bereich
[
first
,
last
)
in nicht-absteigender Reihenfolge sortiert sind.
|
std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> ist true . |
(bis C++20) |
|
std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> ist true . |
(seit C++20) |
Inhaltsverzeichnis |
Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der zu untersuchenden Elemente definiert |
| policy | - | die zu verwendende Ausführungsrichtlinie |
| 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
geordnet
ist) das zweite Argument ist.
Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgendem sein: 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 des Typs (möglicherweise const)
|
| Typanforderungen | ||
-
ForwardIt
muss die Anforderungen von
LegacyForwardIterator
erfüllen.
|
||
-
Compare
muss die Anforderungen von
Compare
erfüllen.
|
||
Rückgabewert
true wenn die Elemente im Bereich in nicht-absteigender Reihenfolge sortiert sind, false andernfalls.
Komplexität
Gegeben N als std:: distance ( first, last ) :
Ausnahmen
Die Überladungen mit einem Template-Parameter namens
ExecutionPolicy
melden Fehler wie folgt:
-
Wenn die Ausführung einer als Teil des Algorithmus aufgerufenen Funktion eine Exception wirft und
ExecutionPolicyeiner der Standard-Policies ist, wird std::terminate aufgerufen. Für jede andereExecutionPolicyist das Verhalten implementierungsdefiniert. - Wenn der Algorithmus keinen Speicher allozieren kann, wird std::bad_alloc geworfen.
Mögliche Implementierung
Siehe auch die Implementierungen in libstdc++ und libc++ .
| is_sorted (1) |
|---|
template<class ForwardIt> bool is_sorted(ForwardIt first, ForwardIt last) { return std::is_sorted_until(first, last) == last; } |
| is_sorted (3) |
template<class ForwardIt, class Compare> bool is_sorted(ForwardIt first, ForwardIt last, Compare comp) { return std::is_sorted_until(first, last, comp) == last; } |
Hinweise
std::is_sorted
gibt
true
für leere Bereiche und Bereiche der Länge eins zurück.
Beispiel
#include <algorithm> #include <cassert> #include <functional> #include <iterator> #include <vector> int main() { std::vector<int> v; assert(std::is_sorted(v.cbegin(), v.cend()) && "ein leerer Bereich ist immer sortiert"); v.push_back(42); assert(std::is_sorted(v.cbegin(), v.cend()) && "ein Bereich der Größe 1 ist immer sortiert"); int data[] = {3, 1, 4, 1, 5}; assert(not std::is_sorted(std::begin(data), std::end(data))); std::sort(std::begin(data), std::end(data)); assert(std::is_sorted(std::begin(data), std::end(data))); assert(not std::is_sorted(std::begin(data), std::end(data), std::greater<>{})); }
Siehe auch
|
(C++11)
|
findet den größten sortierten Teilbereich
(Funktions-Template) |
|
(C++20)
|
prüft, ob ein Bereich in aufsteigender Reihenfolge sortiert ist
(Algorithmus-Funktionsobjekt) |