std::less
Определён в заголовке <functional> | ||
|---|---|---|
template< class T > struct less; | (до C++14) | |
template< class T = void > struct less; | (начиная с C++14) |
Функциональный объект для выполнения сравнений. Основной шаблон вызывает operator< для типа T.
Специализации
|
(C++14) | функциональный объект, реализующий 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() | проверяет, меньше ли первый аргумент второго (открытая функция-член) |
std::less::operator()
bool operator()( const T& lhs, const T& rhs ) const; | (constexpr начиная с 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 (warn: implicit conversion)
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 (warn: implicit conversion)
static_assert(std::less{}(5, 5.6) == true); // less<void>: 5.0 < 5.6
int main() {}
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение согласно опубликованному тексту | Исправленное поведение |
|---|---|---|---|
| LWG 2562 | C++98 | полный порядок указателей мог быть несогласованным | гарантированно согласованный порядок |
См. также
функциональный объект, реализующий x == y (шаблон класса) |
|
функциональный объект, реализующий x > y (шаблон класса) |
|
|
(C++20) | ограниченный функциональный объект, реализующий x < y (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/less