Spec-Zone.ru › C++

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 - неиспользуемый параметр любого типа, принимающий литеральное нулевое значение

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

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
END_OF_DOCUMENT_MARKER

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 с любым другим значением.

Пример

См. также

strong_ordering
(C++20)
тип результата 3-стороннего сравнения, поддерживающий все 6 операторов и являющийся заменяемым
(класс)
weak_ordering
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API