Spec-Zone.ru › C++

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

constexpr friend bool operator==( const std::inplace_vector<T, N>& lhs,
                                  const std::inplace_vector<T, N>& rhs );
(1) (начиная с 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) (начиная с C++26)

Сравнивает содержимое двух std::inplace_vector.

1) Проверяет, равны ли содержимое lhs и rhs, то есть имеют ли они одинаковое количество элементов и сравнивается ли каждый элемент в lhs как равный элементу в rhs в той же позиции.
2) Лексикографически сравнивает содержимое lhs и rhs. Сравнение выполняется так, как если бы был вызван
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
                                       rhs.begin(), rhs.end(), /*synth-three-way*/);
Типом возвращаемого значения является тип возвращаемого значения synth-three-way (то есть synth-three-way-result <T>).
Должно выполняться хотя бы одно из следующих условий:
  • T моделирует three_way_comparable.
  • < определён для значений типа (возможно, с квалификатором const) T, а < является отношением полного порядка.
В противном случае поведение не определено.

Операторы <, <=, >, >= и != синтезируются соответственно из operator<=> и operator==.

Параметры

lhs, rhs - std::inplace_vector, содержимое которых нужно сравнить
-T должны соответствовать требованиям EqualityComparable для использования перегрузок (1).

Возвращаемое значение

1) true, если содержимое std::inplace_vector равны, и false в противном случае.
2) Относительный порядок первой пары неэквивалентных элементов в lhs и rhs, если такие элементы есть, и lhs.size() <=> rhs.size() в противном случае.

Сложность

1) Постоянная, если lhs и rhs имеют разный размер, иначе линейная относительно размера std::inplace_vector.
2) Линейная относительно размера std::inplace_vector.

Примечания

Операторы сравнения определены в терминах synth-three-way, который использует operator<=>, если это возможно, или operator< в противном случае.

Примечательно, что если сам элемент не предоставляет operator<=>, но неявно преобразуется в тип, сравнимый с помощью трёхстороннего сравнения, вместо operator< будет использоваться это преобразование.

Пример

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/operator_cmp

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API