Namespaces
Variants

std::experimental::ranges:: less

From cppreference.net
Определено в заголовочном файле <experimental/ranges/functional>
template < class T = void >

requires StrictTotallyOrdered < T > ||
Same < T, void > ||
/* < on two const T lvalues invokes a built-in operator comparing pointers */

struct less ;
(ranges TS)
template <>
struct less < void > ;
(ranges TS)

Функциональный объект для выполнения сравнений. Основной шаблон вызывает operator < на const lvalue типа T . Специализация less<void> выводит типы параметров функционального оператора вызова из аргументов (но не тип возвращаемого значения).

Все специализации less являются Semiregular .

Содержание

Типы членов

Тип члена Определение
is_transparent (только для члена less<void> специализации) /* неопределён */

Функции-члены

operator()
проверяет, является ли первый аргумент меньше второго
(public member function)

std::experimental::ranges::less:: operator()

constexpr bool operator ( ) ( const T & x, const T & y ) const ;
(1) (член только основного шаблона less<T> )
template < class T, class U >

requires StrictTotallyOrderedWith < T, U > ||
/* std::declval<T>() < std::declval<U>() разрешается в
встроенный оператор сравнения указателей */

constexpr bool operator ( ) ( T && t, U && u ) const ;
(2) (член только специализации less<void> )
1) Сравнивает x и y . Эквивалентно return ranges:: less <> { } ( x, y ) ; .
2) Сравнивает t и u . Эквивалентно return std:: forward < T > ( t ) < std:: forward < U > ( u ) ; , за исключением случаев, когда это выражение разрешается во вызов встроенного operator < для сравнения указателей.

Когда вызов (1) или (2) должен был бы вызвать встроенный оператор сравнения указателей типа P , результат определяется следующим образом:

  • Возвращает true , если (возможно преобразованное) значение первого аргумента предшествует (возможно преобразованному) значению второго аргумента в определенной реализацией строгой тотальной упорядоченности всех значений указателей типа P . Эта строгая тотальная упорядоченность согласована с частичным порядком, накладываемым встроенными операторами < , > , <= и >= .
  • В противном случае возвращает false .

Поведение не определено, если последовательности преобразований из T и U в P не сохраняют равенство (см. ниже).

Сохранение равенства

Выражение сохраняет равенство , если оно даёт равные выходные данные при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, модифицированных выражением (если есть).

Каждое выражение, которое должно сохранять равенство, также должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать одинаковые выходные данные при отсутствии явных промежуточных модификаций этих входных объектов.

Примечания

В отличие от std::less , ranges::less требует, чтобы все шесть операторов сравнения < , <= , > , >= , == и != были допустимы (через ограничения StrictTotallyOrdered и StrictTotallyOrderedWith ).

Пример

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

функциональный объект, реализующий x < y
(шаблон класса)