◐ Shell
clean mode source ↗

std::less - cppreference.com

De cppreference.com

</tbody> <tbody class="t-dcl-rev "> </tbody><tbody>

Definido en el archivo de encabezado <functional>

template< class T > struct less;

(hasta C++14)

template< class T = void > struct less;

(desde C++14)

Objeto función para realizar comparaciones. La plantilla principal invoca a operator< en el tipo T.

Especializaciones

Función objeto que implementa x < y deduciendo los argumentos y los tipos de retorn.
(especialización de plantilla de clase) [editar]

Tipos miembro

Tipo Definición
result_type (en desuso en C++17)(eliminado en C++20) bool
first_argument_type (en desuso en C++17)(eliminado en C++20) T
second_argument_type (en desuso en C++17)(eliminado en C++20) T

Estos tipos miembro se obtienen heredando públicamente de std::binary_function<T, T, bool>.

(hasta C++11)

Funciones miembro

Comprueba si el primer argumento es menor que el segundo.
(función miembro pública)

std::less::operator()

bool operator()( const T& lhs, const T& rhs ) const;

(constexpr desde C++14)

Comprueba si lhs es menor que rhs.

Parámetros

lhs, rhs - Los valores a comparar.

Valor de retorno

lhs < rhs.

Si T es un tipo puntero, el resultado es consistente con el orden total estricto sobre punteros, definido por la implementación.

Excepciones

Puede lanzar excepciones definidas por la implementación.

Posible implementación

constexpr bool operator()(const T& lhs, const T& rhs) const 
{
    return lhs < rhs; // asume que la implementación maneja el orden total de punteros
}

Ejemplo

#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 (advertencia: conversión implícita)
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 (advertencia: conversión implícita)
static_assert(std::less{}(5, 5.6) == true);         // less<void>: 5.0 < 5.6

int main() {}

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2562 C++98 El orden total de punteros podría ser inconsistente. Se garantiza que es consistente.

Véase también