Spec-Zone.ru › C++

std::weak_ordering

Определён в заголовочном файле <compare>
class weak_ordering;
(начиная с C++20)

Тип класса std::weak_ordering является типом результата трёхстороннего сравнения, которое:

  • Поддерживает все шесть операторов сравнения (==, !=, <, <=, >, >=).
  • Не подразумевает взаимозаменяемость: если a эквивалентно b, f(a) может быть не эквивалентно f(b), где f обозначает функцию, которая считывает только значимое для сравнения состояние, доступное через открытые константные члены аргумента. Иными словами, эквивалентные значения могут различаться.
  • Не допускает несравнимых значений: ровно одно из a < b, a == b или a > b должно быть true.

Константы

Тип std::weak_ordering имеет три допустимых значения, реализованных как статические константные члены данных этого типа:

Имя Определение
less
[static]
допустимое значение, обозначающее отношение «меньше» (упорядочено перед)
(публичная статическая константа-член)
equivalent
[static]
допустимое значение, обозначающее эквивалентность (не упорядочено ни перед, ни после)
(публичная статическая константа-член)
greater
[static]
допустимое значение, обозначающее отношение «больше» (упорядочено после)
(публичная статическая константа-член)

Преобразования

std::weak_ordering неявно преобразуется в std::partial_ordering, тогда как std::strong_ordering неявно преобразуется в weak_ordering.

operator partial_ordering
неявное преобразование в std::partial_ordering
(функция-член)

std::weak_ordering::operator partial_ordering

constexpr operator partial_ordering() const noexcept;

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

std::partial_ordering::less, если v равно less, std::partial_ordering::greater, если v равно greater, std::partial_ordering::equivalent, если v равно equivalent.

Сравнения

Операторы сравнения определены для значений этого типа и литерала 0. Это позволяет использовать выражения a <=> b == 0 или a <=> b < 0 для преобразования результата оператора трёхстороннего сравнения в логическое отношение; см. std::is_eq, std::is_lt и т. д.

Эти функции не видны при обычном неквалифицированном поиске или квалифицированном поиске и могут быть найдены только с помощью поиска с учётом аргументов, если std::weak_ordering является ассоциированным классом аргументов.

Поведение программы, которая пытается сравнить weak_ordering с чем-либо, кроме целочисленного литерала 0, не определено.

operator==operator<operator>operator<=operator>=operator<=>
сравнивает с нулём или weak_ordering
(функция)

operator==

friend constexpr bool operator==( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator==( weak_ordering v, weak_ordering w ) noexcept = default;
(2)

Параметры

v, w - значения std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

1) true, если v равно equivalent, false, если v равно less или greater
2) true, если оба параметра содержат одно и то же значение, в противном случае false

operator<

friend constexpr bool operator<( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение типа std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

1) true, если v равно less, и false, если v равно greater или equivalent
2) true, если v равно greater, и false, если v равно less или equivalent

operator<=

friend constexpr bool operator<=( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<=( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение типа std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

1) true, если v равно less или equivalent, и false, если v равно greater
2) true, если v равно greater или equivalent, и false, если v равно less

operator>

friend constexpr bool operator>( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение типа std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

1) true, если v равно greater, и false, если v равно less или equivalent
2) true, если v равно less, и false, если v равно greater или equivalent

operator>=

friend constexpr bool operator>=( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>=( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение типа std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

1) true, если v равно greater или equivalent, и false, если v равно less
2) true, если v равно less или equivalent, и false, если v равно greater

operator<=>

friend constexpr weak_ordering operator<=>( weak_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr weak_ordering operator<=>( /*unspecified*/ u, weak_ordering v ) noexcept;
(2)

Параметры

v - значение типа std::weak_ordering для проверки
u - неиспользуемый параметр любого типа, допускающего аргумент — целочисленный литерал 0

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

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

Пример

См. также

strong_ordering
(C++20)
тип результата трёхстороннего сравнения, поддерживающего все 6 операторов и обеспечивающего взаимозаменяемость
(класс)
partial_ordering
(C++20)
тип результата трёхстороннего сравнения, поддерживающего все 6 операторов, не обеспечивающего взаимозаменяемость и допускающего несравнимые значения
(класс)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/compare/weak_ordering

Spec-Zone.ru

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