Namespaces
Variants

std:: less

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
Определено в заголовочном файле <functional>
template < class T >
struct less ;
(до C++14)
template < class T = void >
struct less ;
(начиная с C++14)

Функциональный объект для выполнения сравнений. Основной шаблон вызывает operator < для типа T .

Содержание

Специализации

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

Типы членов

Тип Определение
result_type (устарело в C++17) (удалено в C++20) bool
first_argument_type (устарело в C++17) (удалено в C++20) T
second_argument_type (устарело в C++17) (удалено в C++20) T

Эти типы членов получены через публичное наследование std:: binary_function < T, T, bool > .

(до C++11)

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

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

std::less:: operator()

bool operator ( ) ( const T & lhs, const T & rhs ) const ;
(constexpr since C++14)

Проверяет, является ли lhs меньшим , чем rhs .

Параметры

lhs, rhs - значения для сравнения

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

lhs < rhs .

Если T является типом указателя, результат соответствует определенной реализацией строгой тотальной упорядоченности указателей .

Исключения

Может выбрасывать определенные реализацией исключения.

Возможная реализация

constexpr bool operator()(const T& lhs, const T& rhs) const 
{
    return lhs < rhs; // assumes that the implementation handles pointer total order
}

Пример

#include <functional>
template<typename A, typename B, typename C = std::less<>>
constexpr bool fun(A a, B b, C cmp = C{})
{
    return cmp(a, b);
}
static_assert(fun(1, 2) == true);
static_assert(fun(1.0, 1) == false);
static_assert(fun(1, 2.0) == true);
static_assert(std::less<int>{}(5, 5.6) == false);   // 5 < 5 (предупреждение: неявное преобразование)
static_assert(std::less<double>{}(5, 5.6) == true); // 5.0 < 5.6
static_assert(std::less<int>{}(5.6, 5.7) == false); // 5 < 5 (предупреждение: неявное преобразование)
static_assert(std::less{}(5, 5.6) == true);         // less<void>: 5.0 < 5.6
int main() {}

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2562 C++98 the pointer total order might be inconsistent guaranteed to be consistent

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

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