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, указывающее на отношение меньше чем (упорядоченное раньше) (public static константа-элемент) |
equivalent(inline constexpr) [static] |
допустимое значение типа std::partial_ordering, указывающее на эквивалентность (ни упорядоченное до, ни упорядоченное после) (public static константа-элемент) |
greater(inline constexpr) [static] |
допустимое значение типа std::partial_ordering, указывающее отношение больше чем (упорядоченное после) (public static константа-элемент) |
unordered(inline constexpr) [static] |
допустимое значение типа std::partial_ordering, указывающее отношение с несравнимым значением (public static константа-элемент) |
Преобразования
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==
<tbody> </tbody> friend constexpr bool operator==( partial_ordering v, /*не указано*/ 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 или unorderedtrue, если оба параметра имеют одинаковое значение, false иначе
operator<
<tbody> </tbody> friend constexpr bool operator<( partial_ordering v, /*не указано*/ u ) noexcept; |
(1) | |
friend constexpr bool operator<( /*не указано*/ u, partial_ordering v ) noexcept; |
(2) | |
Параметры
| v | — | std::partial_ordering значение для проверки
|
| u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
true, если v равно less, и false, если v равно greater, equivalent или unorderedtrue, если v равно greater, и false, если v равно less, equivalent или unordered
operator<=
<tbody> </tbody> friend constexpr bool operator<=( partial_ordering v, /*не указано*/ u ) noexcept; |
(1) | |
friend constexpr bool operator<=( /*не указано*/ u, partial_ordering v ) noexcept; |
(2) | |
Параметры
| v | — | std::partial_ordering значение для проверки
|
| u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
true, если v равно less или equivalent, и false, если v равно greater или unorderedtrue, если v равно greater или equivalent, и false, если v равно less или unordered
operator>
<tbody> </tbody> friend constexpr bool operator>( partial_ordering v, /*не указано*/ u ) noexcept; |
(1) | |
friend constexpr bool operator>( /*не указано*/ u, partial_ordering v ) noexcept; |
(2) | |
Параметры
| v | — | std::partial_ordering значение для проверки
|
| u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
true, если v равно greater, и false, если v равно less, equivalent или unorderedtrue, если v равно less, и false, если v равно greater, equivalent или unordered
operator>=
<tbody> </tbody> friend constexpr bool operator>=( partial_ordering v, /*не указано*/ u ) noexcept; |
(1) | |
friend constexpr bool operator>=( /*не указано*/ u, partial_ordering v ) noexcept; |
(2) | |
Параметры
| v | — | std::partial_ordering значение для проверки
|
| u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
true, если v равно greater или equivalent, и false, если v равно less или unorderedtrue, если v равно less или equivalent, и false, если v равно greater или unordered
operator<=>
<tbody> </tbody> friend constexpr partial_ordering operator<=>( partial_ordering v, /*не указано*/ u ) noexcept; |
(1) | |
friend constexpr partial_ordering operator<=>( /*не указано*/ u, partial_ordering v ) noexcept; |
(2) | |
Параметры
| v | — | std::partial_ordering значение для проверки
|
| u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v.greater, если v равно less, less, если v равно greater, otherwise v.
Примечание
Встроенный operator<=> сравнения значений с плавающей запятой использует следующий порядок: положительный нуль и отрицательный нуль при сравнении equivalent, но их можно различить, а значения NaN при сравнении unordered с любым другим значением.
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и может быть взаимозаменяемым (класс) |
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и невзаимозаменяемый (класс) |