operator==,!=,<,<=,>,>=,<=>(std::list)
Von cppreference.com
| Definiert in Header <list> |
||
| (1) | ||
| (2) | (bis C++20) | |
| (3) | (bis C++20) | |
| (4) | (bis C++20) | |
| (5) | (bis C++20) | |
| (6) | (bis C++20) | |
| (7) | (seit C++20) | |
Vergleicht den Inhalt zweier Listen.
1,2) Prüft, ob der Inhalt von lhs und rhs gleich ist, d. h. sie haben die gleiche Anzahl von Elementen und jedes Element in lhs ist mit dem Element in rhs an der gleichen Position gleich.
3-6) Vergleicht den Inhalt von lhs und rhs lexikographisch. Der Vergleich wird von einer Funktion durchgeführt, die std::lexicographical_compare entspricht.
7) Vergleicht lhs und rhs lexikographisch. Der Vergleich wird so durchgeführt, als ob std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way) aufgerufen würde. Wenn keine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert
-
Tmodelliertthree_way_comparable. -
<ist für Werte des Typs (möglicherweise const-qualifiziert)Tdefiniert, und<ist eine totale Ordnungsrelation.
|
Die Operatoren |
(seit C++20) |
Inhalt |
[bearbeiten] Parameter
| lhs, rhs | - | Zu vergleichende Listen |
-T muss die Anforderungen von EqualityComparable erfüllen, um Überladungen (1,2) zu verwenden. | ||
-T muss die Anforderungen von LessThanComparable erfüllen, um Überladungen (3-6) zu verwenden. Die Ordnungsrelation muss eine totale Ordnung herstellen. | ||
[bearbeiten] Rückgabewert
1) true, wenn der Inhalt der Listen gleich ist, sonst false.
2) true, wenn der Inhalt der Listen ungleich ist, sonst false.
3) true, wenn der Inhalt von lhs lexikographisch kleiner als der Inhalt von rhs ist, false andernfalls.
4) true, wenn der Inhalt von lhs lexikographisch kleiner oder gleich dem Inhalt von rhs ist, false andernfalls.
5) true, wenn der Inhalt von lhs lexikographisch größer als der Inhalt von rhs ist, false andernfalls.
6) true, wenn der Inhalt von lhs lexikographisch größer oder gleich dem Inhalt von rhs ist, false andernfalls.
7) Die relative Ordnung des ersten Paares nicht-gleicher Elemente in lhs und rhs, wenn solche Elemente vorhanden sind, andernfalls lhs.size() <=> rhs.size().
[bearbeiten] Komplexität
1,2) Konstante Zeit, wenn lhs und rhs unterschiedliche Größen haben, andernfalls linear zur Größe der Liste.
3-7) Linear zur Größe der Liste.
[bearbeiten] Hinweise
|
Die relationalen Operatoren sind in Bezug auf den `operator<` des Elementtyps definiert. |
(bis C++20) |
|
Die relationalen Operatoren sind in Bezug auf synth-three-way definiert, der, wenn möglich, `operator<=>` und andernfalls `operator<` verwendet. Insbesondere, wenn das Element selbst keinen `operator<=>` bereitstellt, aber implizit in einen dreiwertig vergleichbaren Typ konvertiert werden kann, wird diese Konvertierung anstelle von `operator<` verwendet. |
(seit C++20) |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cassert> #include <compare> #include <list> int main() { const std::list a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9, 10}; assert ("" "Compare equal containers:" && (a != b) == false && (a == b) == true && (a < b) == false && (a <= b) == true && (a > b) == false && (a >= b) == true && (a <=> b) != std::weak_ordering::less && (a <=> b) != std::weak_ordering::greater && (a <=> b) == std::weak_ordering::equivalent && (a <=> b) >= 0 && (a <=> b) <= 0 && (a <=> b) == 0 && "Compare non equal containers:" && (a != c) == true && (a == c) == false && (a < c) == true && (a <= c) == true && (a > c) == false && (a >= c) == false && (a <=> c) == std::weak_ordering::less && (a <=> c) != std::weak_ordering::equivalent && (a <=> c) != std::weak_ordering::greater && (a <=> c) < 0 && (a <=> c) != 0 && (a <=> c) <= 0 && ""); }
[bearbeiten] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3431 | C++20 | operator<=> erforderte nicht, dass Tthree_way_comparable modelliert. |
requires |