std::is_sorted
| Definiert in 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,
ForwardIt first, ForwardIt last );
|
(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,
ForwardIt first, ForwardIt last, Compare comp );
|
(4) | (seit C++17) |
Prüft, ob die Elemente im Bereich [first, last) in nicht absteigender Reihenfolge sortiert sind.
operator<(bis C++20)std::less{}(seit C++20) sortiert sind.comp sortiert sind.policy ausgeführt.true ist:
|
|
(bis C++20) |
|
|
(seit C++20) |
Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der zu untersuchenden Elemente definiert |
| policy | - | die zu verwendende Ausführungsrichtlinie |
| comp | - | Vergleichsfunktionsobjekt (ein Objekt, das die Anforderungen von Compare erfüllt), das true zurückgibt, wenn das erste Argument kleiner als das zweite ist (d.h. davor geordnet ist). Die Signatur der Vergleichsfunktion sollte der folgenden entsprechen:
Während die Signatur kein |
| Typanforderungen | ||
-ForwardIt muss die Anforderungen von LegacyForwardIterator erfüllen.
| ||
-Compare muss die Anforderungen von Compare erfüllen.
| ||
Rückgabewert
true true, wenn die Elemente im Bereich in nicht absteigender Reihenfolge sortiert sind, false false andernfalls.
Komplexität
Gegeben N als std::distance(first, last):
operator<(bis C++20)std::less{}(seit C++20).comp.Ausnahmen
Die Überladungen mit einem Template-Parameter namens ExecutionPolicy melden Fehler wie folgt:
- Wenn die Ausführung einer im Rahmen des Algorithmus aufgerufenen Funktion eine Ausnahme auslöst und
ExecutionPolicyeine der Standardrichtlinien ist, wird std::terminate aufgerufen. Für jede andereExecutionPolicyist das Verhalten implementierungsdefiniert. - Wenn der Algorithmus keinen Speicher zuweisen kann, wird std::bad_alloc ausgelöst.
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;
}
|
Anmerkungen
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()) && "an empty range is always sorted");
v.push_back(42);
assert(std::is_sorted(v.cbegin(), v.cend()) && "a range of size 1 is always sorted");
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 Unterbereich (Funktionsschablone & Algorithmus-Funktionsobjekt) |
(C++20) |
|
(C++20) |
prüft, ob ein Bereich sortiert ist (Algorithmus-Funktionsobjekt) |