Espacios de nombres
Variantes
Acciones

std::ranges::less

De cppreference.com
< cpp‎ | utility‎ | functional
 
 
Biblioteca de servicios
 
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
ranges::less
(C++20)
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).

Contenido

[editar] 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:

[editar] Tipos miembro

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

[editar] 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).

[editar] 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.

[editar] 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).

[editar] Ejemplo

[editar] 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.

[editar] Véase también

Objeto función que implementa x < y.
(plantilla de clase) [editar]