operator==,<=> (std::inplace_vector)
Von cppreference.com
< cpp | container | inplace vector
| constexpr friend bool operator==( const std::inplace_vector<T, N>& lhs, const std::inplace_vector<T, N>& rhs ); |
(1) | (seit C++26) |
| constexpr friend synth-three-way-result<T> operator<=> ( const std::inplace_vector<T, N>& lhs, |
(2) | (seit C++26) |
Vergleicht den Inhalt zweier std::inplace_vectors.
1) 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 vergleicht sich gleich mit dem Element in rhs an der gleichen Position.
2) Vergleicht den Inhalt von lhs und rhs lexikographisch. Der Vergleich wird so durchgeführt, als ob aufgerufen würde
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
Mindestens eine der folgenden Bedingungen muss erfüllt sein
-
Tmodelliertthree_way_comparable. -
<ist für Werte des Typs (möglicherweise const-qualifiziert)Tdefiniert, und<ist eine totale Ordnungsrelation.
Die Operatoren <, <=, >, >= und != sind synthetisiert aus operator<=> und operator== beziehungsweise.
Inhalt |
[bearbeiten] Parameter
| lhs, rhs | - | std::inplace_vectors, deren Inhalt verglichen werden soll |
-T muss die Anforderungen an EqualityComparable erfüllen, um die Überladungen (1) verwenden zu können. | ||
[bearbeiten] Rückgabewert
1) true, wenn der Inhalt der std::inplace_vectors gleich ist, andernfalls false.
2) Die relative Reihenfolge des ersten Paares von nicht-äquivalenten Elementen in lhs und rhs, falls solche Elemente vorhanden sind, andernfalls lhs.size() <=> rhs.size().
[bearbeiten] Komplexität
1) Konstante Zeit, wenn lhs und rhs unterschiedliche Größen haben, andernfalls linear in der Größe des std::inplace_vector.
2) Linear in der Größe des std::inplace_vector.
[bearbeiten] Hinweise
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.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <inplace_vector> int main() { constexpr std::inplace_vector<int, 4> a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9, 10}; static_assert ("" "Compare equal containers:" && (a != b) == false && (a == b) == true && (a < b) == false && (a <= b) == true && (a > b) == false && (a >= b) == true && (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) < 0 && (a <=> c) != 0 && (a <=> c) <= 0 && ""); }