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 | - | неиспользуемый параметр любого типа, принимающий целочисленную константу ноль |
Результат
true если v есть equivalent, false если v есть less или greater
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 | - | неиспользуемый параметр любого типа, принимающий целочисленную константу ноль |
Результат
true если v есть less, и false если v есть greater или equivalent
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 | - | неиспользуемый параметр любого типа, принимающий целочисленную константу ноль |
Результат
true если v есть less или equivalent, и false если v есть greater
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 | - | неиспользуемый параметр любого типа, принимающий целочисленную константу ноль |
Результат
true если v есть greater, и false если v есть less или equivalent
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 | - | неиспользуемый параметр любого типа, принимающий целочисленную константу ноль |
Результат
true если v есть greater или equivalent, и false если v есть less
true если v есть less или equivalent, и false если v есть greater оператор<=>
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 | - | неиспользуемый параметр любого типа, принимающий аргумент по умолчанию ноль |
Возвращаемое значение
v.greater если v является less, less если v является greater, в противном случае v. Пример
См. также
|
(C++20) | тип результата 3-стороннего сравнения, поддерживающий все 6 операторов и являющийся заменяемым (класс) |
|
(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