Espacios de nombres
Variantes

std::ranges::less

De cppreference.com
 
 
Biblioteca de servicios
Apoyo del lenguaje
Apoyo de tipos (tipos básicos, RTTI)
Macros de prueba de característica de la biblioteca (C++20)
Servicios de programa
Funciones variádicas
Apoyo de corrutinas (C++20)
Apoyo de contratos (C++26)
Comparación de tres vías (C++20)
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

 
Objetos función
Envoltorios de funciones
(C++11)
(C++11)
Aplicación parcial de funciones
(C++20)
(C++11)
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de referencias
(C++11)(C++11)
Envoltorios de operador transparentes
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
Negadores
(C++17)
Buscadores
Comparadores restringidos
Vinculadores y adaptadores antiguos
(hasta C++17)
(hasta C++17)
(hasta C++17)
(hasta C++17)
(hasta C++17)(hasta C++17)(hasta C++17)(hasta C++17)
(hasta C++20)
(hasta C++20)
(hasta C++17)(hasta C++17)
(hasta C++17)(hasta C++17)

(hasta C++17)
(hasta C++17)(hasta C++17)(hasta C++17)(hasta C++17)
(hasta C++20)
(hasta C++20)
 
Definido en el archivo de encabezado <functional>
struct less;
(desde C++20)

Función objeto para realizar comparaciones. Deduce los tipos de parámetro del operador de llamada a función a partir de los argumentos (pero no el tipo de retorno).

Orden total estricto para punteros definido por la implementación

El operador de llamada a función produce el orden total estricto para punteros definido por la implementación si el operador < entre argumentos invoca un operador de comparación integrado para un puntero, incluso si el operador < no lo hace.

El orden total estricto definido por la implementación es consistente con el orden parcial impuesto por los operadores de comparación integrados (<=>, <, >, <=, y >=), y consistente entre los siguientes objetos función estándar:

  • std::less, std::greater, std::less_equal, y std::greater_equal, cuando el argumento de plantilla es un tipo puntero o void

Tipos miembro

Tipo miemtro Definición
is_transparent /* no especificado */

Funciones miembro

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

std::ranges::less::operator()

template< class T, class U >
    requires std::totally_ordered_with<T, U> // con distintos requerimientos semánticos
constexpr bool operator()(T&& t, U&& u) const;

Compara a t y u, es equivalente a return std::forward<T>(t) < std::forward<U>(u);, excepto cuando esa expresión se resuelve en una llamada al operador operator< integrado para comparar punteros.

Cuando una llamada no invocaría un operador integrado para comparar punteros, el comportamiento no está definido si no se modela std::totally_ordered_with<T, U>.

Cuando una llamada invocaría un operador integrado para comparar punteros de tipo P, en su lugar el resultado se determina de la siguiente manera:

  • Devuelve true si el valor (posiblemente convertido) del primer argumento precede al valor (posiblemente convertido) del segundo argumento en el orden total estricto definido por la implementación sobre todos los valores de puntero de tipo P. Este orden total estricto es consistente con el orden parcial impuesto por los operadores integrados <, >, <=, y >=.
  • De lo contrario, devuelve false.

El comportamiento no está definido a menos que las secuencias de conversión de tanto T como U para P sean conservadoras de la igualdad (véase más abajo).

Conservación de la igualdad

Una expresión es conservadora de igualdad si resulta en salidas iguales dadas entradas iguales.

  • Las entradas de una expresión consisten en sus operandos.
  • Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si es que los hay).

Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.

Notas

A diferencia de std::less, std::ranges::less requiere que los seis operadores de comparación <, <=, >, >=, == y != sean válidos (mediante la restricción totally_ordered_with).

Ejemplo

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 3530 C++20 Las comprobaciones sintácticas fueron relajadas al comparar punteros. Solo se relajaron los requerimientos semánticos.

Véase también

Objeto función que implementa x < y.
(plantilla de clase) [editar]
Morty Proxy This is a proxified and sanitized view of the page, visit original site.