Пространства имён
Варианты
Действия

std::less

Материал из cppreference.com
< cpp‎ | utility‎ | functional
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Объекты функции
Функции обёртки
(C++11)
(C++11)
Применение частичных функций
(C++20)(C++23)
(C++11)
Вызов функции
(C++17)(C++23)
Объект идентичности функции
(C++20)
Обёртки ссылок
(C++11)(C++11)
Прозрачные обёртки операторов
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Отрицатели
(C++17)
Искатели
Ограниченные компараторы
Старые привязки и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

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

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

Содержание

[править] Определяемый реализацией строгий общий порядок указателей

Специализация std::less для любого типа указателя приводит к определённому реализацией строгому общему порядку, даже если встроенный < оператор нет.

Строгий общий порядок, определяемый реализацией, согласуется с частичным порядком, налагаемым встроенными операторами сравнения (<=>, (начиная с C++20)<, >, <= и >=), и согласуется со следующими стандартными функциональными объектами:

(начиная с C++20)

[править] Специализации

объект-функция, реализующий 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
(шаблон класса) [править]
функциональный объект, реализующий x < y
(класс) [править]