Namensräume
Varianten
Aktionen

operator==,<=> (std::inplace_vector)

Von cppreference.com
 
 
 
 
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,

                 const std::inplace_vector<T, N>& rhs );
(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);
.
Der Rückgabetyp ist der Rückgabetyp von synth-three-way (d. h. synth-three-way-result <T>).
Mindestens eine der folgenden Bedingungen muss erfüllt sein
  • T modelliert three_way_comparable.
  • < ist für Werte des Typs (möglicherweise const-qualifiziert) T definiert, und < ist eine totale Ordnungsrelation.
   Andernfalls ist das Verhalten undefiniert.

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

#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 &&
    "");
}