Namespaces
Variants

std:: partial_ordering

From cppreference.net
Utilities library
Определено в заголовке <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 имеет четыре допустимых значения, реализованных как константные статические члены данных его типа:

Название Определение
inline constexpr std :: partial_ordering less
[static]
допустимое значение, указывающее отношение "меньше чем" (упорядочено до)
(публичная статическая константа-член)
inline constexpr std :: partial_ordering equivalent
[static]
допустимое значение, указывающее эквивалентность (ни упорядочено до, ни упорядочено после)
(публичная статическая константа-член)
inline constexpr std :: partial_ordering greater
[static]
допустимое значение, указывающее отношение "больше чем" (упорядочено после)
(публичная статическая константа-член)
inline constexpr std :: partial_ordering unordered
[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 и др.

Эти функции не видны при обычном unqualified или qualified lookup и могут быть найдены только с помощью argument-dependent lookup , когда 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 - неиспользуемый параметр любого типа, принимающий литеральный нулевой аргумент

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

1) true если v является equivalent , false если v является less , greater , или unordered
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент литерального нуля

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

1) true если v является less , и false если v является greater , equivalent , или unordered
2) 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 - неиспользуемый параметр любого типа, принимающий литеральный нулевой аргумент

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

1) true если v является less или equivalent , и false если v является greater или unordered
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент литерального нуля

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

1) true если v является greater , и false если v является less , equivalent , или unordered
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент литерального нуля

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

1) true если v является greater или equivalent , и false если v является less или unordered
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент литерального нуля

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

1) v .
2) greater если v равен less , less если v равен greater , иначе v .

Примечания

Встроенный operator<=> для значений с плавающей запятой использует следующий порядок: положительный ноль и отрицательный ноль сравниваются как equivalent , но могут быть различимы, а значения NaN сравниваются как unordered с любыми другими значениями.

Пример

Смотрите также

тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и является заменяемым
(class)
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и не является заменяемым
(class)