std::less
Определено в заголовочном файле <functional>
|
||
template< class T > struct less; |
(до C++14) | |
template< class T = void > struct less; |
(начиная с C++14) | |
Функциональный объект для выполнения сравнений. Если не указано иное, вызывает operator< для типа T
.
Содержание |
[править] Определяемый реализацией строгий общий порядок указателей
Специализация std::less
для любого типа указателя приводит к определённому реализацией строгому общему порядку, даже если встроенный <
оператор нет.
Строгий общий порядок, определяемый реализацией, согласуется с частичным порядком, налагаемым встроенными операторами сравнения (<=>
, (начиная с C++20)<
, >
, <=
и >=
), и согласуется со следующими стандартными функциональными объектами:
- std::less, std::greater, std::less_equal и std::greater_equal, когда аргумент шаблона тип указателя или void (начиная с C++14)
|
(начиная с C++20) |
[править] Специализации
(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() |
проверяет, меньше ли первый аргумент второго (public функция-элемент) |
std::less::operator()
bool operator()( const T& lhs, const T& rhs ) const; |
(до C++14) | |
constexpr bool operator()( const T& lhs, const T& rhs ) const; |
(начиная с C++14) | |
Проверяет, меньше ли lhs, чем rhs.
Параметры
lhs, rhs | — | значения для сравнения |
Возвращаемое значение
Для T
, который не является указателем, true, если lhs < rhs, иначе false.
Для T
, который является типом указателя, true, если lhs предшествует rhs в строгом общем порядке, определяемом реализацией, иначе false.
[править] Исключения
Может генерировать исключения, определённые реализацией.
Возможная реализация
constexpr bool operator()(const T &lhs, const T &rhs) const { return lhs < rhs; // предполагает, что реализация использует // плоское адресное пространство } |
[править] Пример
#include <functional> #include <iostream> template <typename A, typename B, typename C = std::less<>> bool fun(A a, B b, C cmp = C{}) { return cmp(a, b); } int main() { std::cout << std::boolalpha << fun(1, 2) << ' ' // true << fun(1.0, 1) << ' ' // false << fun(1, 2.0) << ' ' // true << std::less<int>{}(5, 5.6) << ' ' // false: 5 < 5 (предупреждение: неявное // преобразование) << std::less<double>{}(5, 5.6) << ' ' // true: 5.0 < 5.6 << std::less<int>{}(5.6, 5.7) << ' ' // false: 5 < 5 (предупреждение: неявное // преобразование) << std::less{}(5, 5.6) << ' ' // true: less<void>: 5.0 < 5.6 << '\n'; }
Вывод:
true false true false true false true
[править] Смотрите также
функциональный объект, реализующий x == y (шаблон класса) | |
функциональный объект, реализующий x > y (шаблон класса) | |
(C++20) |
функциональный объект, реализующий x < y (класс) |