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
|
|
Эти типы элементы получаются путём открытого наследования |
(до C++11) |
Функции-элементы
operator() |
проверяет, меньше ли первый аргумент второго (public функция-элемент) |
std::less::operator()
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody> 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 (класс) |