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
[статический]
допустимое значение, обозначающее отношение «меньше» (упорядочено перед)
(общедоступная статическая константа-член)
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, не определено.

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

Пример

См. также

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

Spec-Zone.ru

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