std::partial_ordering
Определено в заголовке <compare> | ||
|---|---|---|
class partial_ordering; | (с C++20) |
Тип класса std::partial_ordering является типом результата трёхстороннего сравнения, который:
- Поддерживает все шесть операторов отношения (
==,!=,<,<=,>,>=). - Не подразумевает взаимозаменяемость: если
aэквивалентноb,f(a)может не быть эквивалентнымf(b), гдеfобозначает функцию, которая считывает только релевантные для сравнения состояния, доступные через публичные константные члены аргумента. Другими словами, эквивалентные значения могут быть различимыми. - Поддерживает несравнимые значения:
a < b,a == b, иa > bмогут все бытьfalse.
Константы
Тип std::partial_ordering имеет четыре допустимых значения, реализованных как статические константные данные его типа:
| Член-константа | Определение |
|---|---|
| less(inline constexpr)
[static] | допустимое значение типа std::partial_ordering, указывающее отношение меньше (упорядочено перед) (общедоступная статическая константа-член) |
| equivalent(inline constexpr)
[static] | допустимое значение типа std::partial_ordering, указывающее эквивалентность (ни упорядочено перед, ни упорядочено после) (общедоступная статическая константа-член) |
| greater(inline constexpr)
[static] | допустимое значение типа std::partial_ordering, указывающее отношение больше (упорядочено после) (общедоступная статическая константа-член) |
| unordered(inline constexpr)
[static] | допустимое значение типа std::partial_ordering, указывающее отношение несравнимых значений (общедоступная статическая константа-член) |
Преобразования
std::partial_ordering не может быть неявно преобразовано в другие типы категорий сравнения, в то время как std::strong_ordering и std::weak_ordering могут быть неявно преобразованы в partial_ordering.
Сравнения
Операторы сравнения определены между значениями этого типа и целочисленными литералами 0. Это поддерживает выражения a <=> b == 0 или a <=> b < 0 , которые могут быть использованы для преобразования результата оператора трёхстороннего сравнения в булево отношение; см. std::is_eq, std::is_lt и т.д.
Эти функции не видны обычному неквалифицированному или квалифицированному поиску и могут быть найдены только поиском по зависимым от аргументов именам, когда std::partial_ordering является связанным классом аргументов.
Поведение программы, пытающейся сравнить partial_ordering с чем-либо, кроме целочисленного литерала 0, неопределённо.
| operator==operator<operator>operator<=operator>=operator<=> | сравнивает с нулём или partial_ordering (функция) |
operator==
friend constexpr bool operator==( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr bool
operator==( partial_ordering v, partial_ordering w ) noexcept = default;
| (2) |
Параметры
| v, w | - | значения std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное нулевое значение |
Возвращаемое значение
true , если v равно equivalent, false , если v равно less, greater, или unordered
true , если оба параметра имеют одинаковое значение, false в противном случае operator<
friend constexpr bool operator<( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr bool operator<( /*unspecified*/ u, partial_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное нулевое значение |
Возвращаемое значение
true , если v равно less, и false , если v равно greater, equivalent, или unordered
true , если v равно greater, и false , если v равно less, equivalent, или unordered operator<=
friend constexpr bool operator<=( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr bool operator<=( /*unspecified*/ u, partial_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное нулевое значение |
Возвращаемое значение
true , если v равно less или equivalent, и false , если v равно greater или unordered
true , если v равно greater или equivalent, и false , если v равно less или unordered operator>
friend constexpr bool operator>( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr bool operator>( /*unspecified*/ u, partial_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное нулевое значение |
Возвращаемое значение
true , если v равно greater, и false , если v равно less, equivalent, или unordered
true , если v равно less, и false , если v равно greater, equivalent, или unordered operator>=
friend constexpr bool operator>=( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr bool operator>=( /*unspecified*/ u, partial_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное нулевое значение |
Возвращаемое значение
true , если v равно greater или equivalent, и false , если v равно less или unordered
true , если v равно less или equivalent, и false , если v равно greater или unordered operator<=>
friend constexpr partial_ordering operator<=>( partial_ordering v, /*unspecified*/ u ) noexcept; | (1) | |
friend constexpr partial_ordering operator<=>( /*unspecified*/ u, partial_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение типа std::partial_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий литеральное значение ноль в качестве аргумента |
Возвращаемое значение
v.greater если v является less, less если v является greater, в противном случае v. Примечания
Встроенное operator<=> между значениями с плавающей точкой использует такой порядок: положительный ноль и отрицательный ноль сравниваются equivalent, но могут быть различимы, а значения NaN сравниваются unordered с любым другим значением.
Пример
См. также
|
(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/partial_ordering