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
[статический] | допустимое значение, обозначающее отношение «меньше» (упорядочено перед) (общедоступная статическая константа-член) |
|
equivalent
[статический] | допустимое значение, обозначающее эквивалентность (не упорядочено ни перед, ни после) (общедоступная статическая константа-член) |
|
greater
[статический] | допустимое значение, обозначающее отношение «больше» (упорядочено после) (общедоступная статическая константа-член) |
|
unordered
[статический] | допустимое значение, обозначающее отношение с несравнимым значением (общедоступная статическая константа-член) |
Преобразования
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, не определено.
сравнивает с нулём или 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) | тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и обладающий взаимозаменяемостью (класс) |
|
(C++20) | тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и не обладающий взаимозаменяемостью (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/compare/partial_ordering