Spec-Zone.ru › C++

operator==,!=,<,<=,>,>=, <=>(std::forward_list)

Определено в заголовочном файле <forward_list>
template< class T, class Alloc >
bool operator==( const std::forward_list<T, Alloc>& lhs,
                 const std::forward_list<T, Alloc>& rhs );
(1) (с C++11)
template< class T, class Alloc >
bool operator!=( const std::forward_list<T, Alloc>& lhs,
                 const std::forward_list<T, Alloc>& rhs );
(2) (с C++11)
(до C++20)
template< class T, class Alloc >
bool operator<( const std::forward_list<T, Alloc>& lhs,
                const std::forward_list<T, Alloc>& rhs );
(3) (с C++11)
(до C++20)
template< class T, class Alloc >
bool operator<=( const std::forward_list<T, Alloc>& lhs,
                 const std::forward_list<T, Alloc>& rhs );
(4) (с C++11)
(до C++20)
template< class T, class Alloc >
bool operator>( const std::forward_list<T, Alloc>& lhs,
                const std::forward_list<T, Alloc>& rhs );
(5) (с C++11)
(до C++20)
template< class T, class Alloc >
bool operator>=( const std::forward_list<T, Alloc>& lhs,
                 const std::forward_list<T, Alloc>& rhs );
(6) (с C++11)
(до C++20)
template< class T, class Alloc >
/* see below */ operator<=>( const std::forward_list<T, Alloc>& lhs,
                             const std::forward_list<T, Alloc>& rhs );
(7) (с C++20)

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

1,2) Проверяет, равны ли содержимое lhs и rhs, то есть, имеют ли они одинаковое количество элементов и каждый элемент в lhs сравнивается как равный элементу в rhs на той же позиции.
3-6) Сравнивает содержимое lhs и rhs лексикографически. Сравнение выполняется функцией, эквивалентной std::lexicographical_compare.
7) Сравнивает содержимое lhs и rhs лексикографически. Сравнение выполняется так, как если бы вызывалась std::lexicographical_compare_three_way для двух forward_list с объектом функции, выполняющим синтезированное сравнение «три-в-одном» (см. ниже). Тип возвращаемого значения совпадает с типом результата синтезированного сравнения «три-в-одном».

Для двух const E lvalues lhs и rhs в качестве левого и правого операндов соответственно (где E является T), синтезированное сравнение «три-в-одном» определяется следующим образом:

  • если выполняется условие std::three_way_comparable_with<E, E>, эквивалентно lhs <=> rhs;
  • в противном случае, если сравнение двух const E lvalues с оператором < корректно и тип результата удовлетворяет boolean-testable, эквивалентно
lhs < rhs ? std::weak_ordering::less :
rhs < lhs ? std::weak_ordering::greater :
            std::weak_ordering::equivalent
  • в противном случае, синтезированное сравнение «три-в-одном» не определено, и оператор <=> не участвует в разрешении перегрузки.
Поведение оператора <=> не определено, если three_way_comparable_with или boolean-testable выполняется, но не моделируется, или оператор < используется, но E и < не устанавливают полное упорядочение.

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

(с C++20)

Параметры

lhs, rhs - forward_list объекты, содержимое которых нужно сравнить
-T должны удовлетворять требованиям EqualityComparable для использования перегрузок (1,2).
-T должны удовлетворять требованиям LessThanComparable для использования перегрузок (3-6). Отношение порядка должно устанавливать полное упорядочение.

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

1) true если содержимое forward_list объектов равны, false в противном случае.
2) true если содержимое forward_list объектов не равны, false в противном случае.
3) true если содержимое lhs лексикографически меньше содержимого rhs, false в противном случае.
4) true если содержимое lhs лексикографически меньше или равно содержимому rhs, false в противном случае.
5) true если содержимое lhs лексикографически больше содержимого rhs, false в противном случае.
6) true если содержимое lhs лексикографически больше или равно содержимому rhs, false в противном случае.
7) Относительный порядок первой пары неэквивалентных элементов в lhs и rhs если такие элементы существуют, lhs.size() <=> rhs.size() в противном случае.

Сложность

Линейна по размеру forward_list.

Пример

#include <cassert>
#include <forward_list>
 
int main()
{
    const std::forward_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 &&
    "");
}

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

Spec-Zone.ru

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