Namespaces
Variants

C++ named requirements: Compare

From cppreference.net
C++ named requirements

Compare es un conjunto de requisitos esperados por algunas de las facilidades de la biblioteca estándar para los tipos de objetos función proporcionados por el usuario.

El valor de retorno de la operación de llamada a función aplicada a un objeto de un tipo que satisface Compare , cuando se convierte a bool , produce true si el primer argumento de la llamada aparece antes que el segundo en la relación de ordenamiento estricto débil inducida por este tipo, y false en caso contrario.

Como con cualquier BinaryPredicate , la evaluación de esa expresión no puede llamar a funciones no constantes a través de los iteradores desreferenciados y, sintácticamente, la operación de llamada a función debe aceptar const argumentos de objeto, con el mismo comportamiento independientemente de si los argumentos son const o no const .

Contenidos

Requisitos

El tipo T satisface Compare si

Dado

Las siguientes expresiones deben ser válidas y tener sus efectos especificados:

Expresión Tipo de retorno Requisitos
comp ( a, b )

cumple con BooleanTestable

(hasta C++20)

modela boolean-testable

(desde C++20)
Establece una relación de ordenamiento débil estricto con las siguientes propiedades:
  • Para todo a , comp ( a, a ) == false .
  • Si comp ( a, b ) == true entonces comp ( b, a ) == false .
  • Si comp ( a, b ) == true y comp ( b, c ) == true entonces comp ( a, c ) == true .
equiv ( a, b ) bool Establece una relación de equivalencia con las siguientes propiedades:
  • Para todo a , equiv ( a, a ) == true .
  • Si equiv ( a, b ) == true , entonces equiv ( b, a ) == true .
  • Si equiv ( a, b ) == true y equiv ( b, c ) == true , entonces equiv ( a, c ) == true .

Nota: comp induce un orden total estricto en las clases de equivalencia determinadas por equiv .

Biblioteca estándar

Las siguientes facilidades de la biblioteca estándar esperan un tipo Compare .

colección de claves únicas, ordenadas por claves
(class template)
colección de pares clave-valor, ordenados por claves, las claves son únicas
(class template)
colección de claves, ordenadas por claves
(plantilla de clase)
colección de pares clave-valor, ordenados por claves
(plantilla de clase)
adapta un contenedor para proporcionar cola de prioridad
(plantilla de clase)
ordena un rango en orden ascendente
(plantilla de función)
ordena los elementos
(función miembro pública de std::forward_list<T,Allocator> )
ordena los elementos
(función miembro pública de std::list<T,Allocator> )
ordena un rango de elementos preservando el orden entre elementos iguales
(plantilla de función)
ordena los primeros N elementos de un rango
(function template)
copia y ordena parcialmente un rango de elementos
(plantilla de función)
(C++11)
verifica si un rango está ordenado en orden ascendente
(plantilla de función)
encuentra el subrango ordenado más grande
(plantilla de función)
ordena parcialmente el rango dado asegurando que esté particionado por el elemento especificado
(plantilla de función)
devuelve un iterador al primer elemento no menor que el valor dado
(plantilla de función)
devuelve un iterador al primer elemento mayor que cierto valor
(plantilla de función)
determina si un elemento existe en un rango parcialmente ordenado
(plantilla de función)
devuelve el rango de elementos que coinciden con una clave específica
(plantilla de función)
combina dos rangos ordenados
(function template)
fusiona dos listas ordenadas
(función miembro pública de std::forward_list<T,Allocator> )
fusiona dos listas ordenadas
(función miembro pública de std::list<T,Allocator> )
combina dos rangos ordenados in situ
(plantilla de función)
devuelve true si una secuencia es una subsecuencia de otra
(plantilla de función)
calcula la diferencia entre dos conjuntos
(plantilla de función)
calcula la intersección de dos conjuntos
(plantilla de función)
calcula la diferencia simétrica entre dos conjuntos
(plantilla de función)
calcula la unión de dos conjuntos
(plantilla de función)
agrega un elemento a un montículo máximo
(plantilla de función)
elimina el elemento más grande de un montículo máximo
(plantilla de función)
crea un montículo máximo a partir de un rango de elementos
(plantilla de función)
convierte un montículo máximo en un rango de elementos ordenados de forma ascendente
(plantilla de función)
(C++11)
verifica si el rango dado es un max heap
(function template)
encuentra el subrango más grande que es un max heap
(plantilla de función)
devuelve el mayor de los valores dados
(plantilla de función)
devuelve el elemento más grande en un rango
(function template)
devuelve el menor de los valores dados
(plantilla de función)
devuelve el elemento más pequeño en un rango
(plantilla de función)
(C++11)
devuelve el menor y el mayor de dos elementos
(plantilla de función)
devuelve los elementos más pequeño y más grande en un rango
(plantilla de función)
devuelve true si un rango es lexicográficamente menor que otro
(plantilla de función)
genera la siguiente permutación lexicográfica mayor de un rango de elementos
(plantilla de función)
genera la siguiente permutación lexicográfica más pequeña de un rango de elementos
(plantilla de función)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2114
( P2167R3 )
C++98 la convertibilidad contextual de tipos de retorno a bool no
reflejaba la práctica de las implementaciones
requisitos corregidos
LWG 3031 C++98 los requisitos sobre valores const eran insuficientes requisitos reforzados

Véase también

especifica que una relation impone un ordenamiento estricto débil
(concepto)
Operadores de comparación < , <= , > , >= , == , != , y <=> (C++20) , comparan los argumentos