Spec-Zone.ru › C++

std::weak_ordering

Определено в заголовке <compare>
class weak_ordering;
(с C++20)

Тип класса std::weak_ordering — это тип результата трёхстороннего сравнения, который:

  • Допускает все шесть операторов отношений (==, !=, <, <=, >, >=).
  • Не подразумевает взаимозаменяемость: если a эквивалентно b, f(a) может не быть эквивалентным f(b), где f обозначает функцию, которая считывает только релевантные для сравнения состояния, доступные через публичные константные члены аргумента. Другими словами, эквивалентные значения могут быть различимы.
  • Не допускает несравнимые значения: ровно одно из a < b, a == b, или a > b должно быть true.

Константы

Тип std::weak_ordering имеет три допустимых значения, реализованных как статические константные данные его типа:

Константа-член Определение
less(inline constexpr)
[static]
допустимое значение типа std::weak_ordering, указывающее отношение «меньше» (располагается перед)
(публичная статическая константа-член)
equivalent(inline constexpr)
[static]
допустимое значение типа std::weak_ordering, указывающее эквивалентность (не расположено ни перед, ни после)
(публичная статическая константа-член)
greater(inline constexpr)
[static]
допустимое значение типа std::weak_ordering, указывающее отношение «больше» (располагается после)
(публичная статическая константа-член)

Преобразования

std::weak_ordering неявно преобразуется в std::partial_ordering, а std::strong_ordering неявно преобразуется в weak_ordering.

operator partial_ordering
неявное преобразование в std::partial_ordering
(публичный член-функция)

std::weak_ordering::operator partial_ordering

constexpr operator partial_ordering() const noexcept;

Результат

std::partial_ordering::less если v есть less, std::partial_ordering::greater если v есть greater, std::partial_ordering::equivalent если v есть equivalent.

Сравнения

Операторы сравнения определены между значениями этого типа и целочисленной константой ​0​. Это поддерживает выражения a <=> b == 0 или a <=> b < 0, которые могут быть использованы для преобразования результата трёхстороннего оператора сравнения в булево отношение; см. std::is_eq, std::is_lt и т. д.

Эти функции не видны для обычного неквалифицированного или квалифицированного поиска, и их можно найти только с помощью поиска, зависящего от аргументов, когда std::weak_ordering является ассоциированным классом аргументов.

Поведение программы, пытающейся сравнить weak_ordering с чем-либо, кроме целочисленной константы ​0​, не определено.

operator==operator<operator>operator<=operator>=operator<=>
сравнивает с нулём или с weak_ordering
(функция)

operator==

friend constexpr bool operator==( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator==( weak_ordering v, weak_ordering w ) noexcept = default;
(2)

Параметры

v, w - значения std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий целочисленную константу ноль

Результат

1) true если v есть equivalent, false если v есть less или greater
2) true если оба параметра содержат одно и то же значение, false в противном случае

operator<

friend constexpr bool operator<( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий целочисленную константу ноль

Результат

1) true если v есть less, и false если v есть greater или equivalent
2) true если v есть greater, и false если v есть less или equivalent

operator<=

friend constexpr bool operator<=( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<=( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий целочисленную константу ноль

Результат

1) true если v есть less или equivalent, и false если v есть greater
2) true если v есть greater или equivalent, и false если v есть less

operator>

friend constexpr bool operator>( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий целочисленную константу ноль

Результат

1) true если v есть greater, и false если v есть less или equivalent
2) true если v есть less, и false если v есть greater или equivalent

operator>=

friend constexpr bool operator>=( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>=( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий целочисленную константу ноль

Результат

1) true если v есть greater или equivalent, и false если v есть less
2) true если v есть less или equivalent, и false если v есть greater
END_OF_DOCUMENT_MARKER

оператор<=>

friend constexpr weak_ordering operator<=>( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr weak_ordering operator<=>( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, принимающий аргумент по умолчанию ноль

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

1) v.
2) greater если v является less, less если v является greater, в противном случае v.

Пример

См. также

strong_ordering
(C++20)
тип результата 3-стороннего сравнения, поддерживающий все 6 операторов и являющийся заменяемым
(класс)
partial_ordering
(C++20)
тип результата 3-стороннего сравнения, поддерживающий все 6 операторов, не являющийся заменяемым и допускающий несравнимые значения
(класс)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/compare/weak_ordering

Spec-Zone.ru

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