Namespaces
Variants

C++ named requirements: Compare

From es.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 .

Contenido

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
(plantilla de clase)
map
colección de pares clave-valor, ordenados por claves, las claves son únicas

multiset
(plantilla de clase)
colección de pares clave-valor, ordenados por claves
(plantilla de clase)
priority_queue
adapta un contenedor para proporcionar una cola de prioridad &(plantilla de clase)
sort
(plantilla de función
objeto función de algoritmo)std::forward_list<T,Allocator>
(C++20)
sortstd::list<T,Allocator>ordena los elementos
)
&sort
(función miembro pública de

stable_sort&ordena un rango de elementos preservando el orden relativo entre elementos equivalentes
objeto función de algoritmo)
ranges::stable_sort
(C++20)&
ordena los primeros N elementos de un rango
objeto función de algoritmo)

ranges::partial_sort&(C++20)
partial_sort_copy
objeto función de algoritmo)
&ranges::partial_sort_copy
(C++11)
comprueba si un rango está ordenado&(plantilla de función
(C++20)
&is_sorted_until
encuentra el mayor subrango ordenado
objeto función de algoritmo)
&ranges::is_sorted_until
encuentra el elemento N si el rango estuviera ordenado
(plantilla de función & objeto función de algoritmo)
ranges::nth_element

lower_bound&encuentra el primer elemento no menor que el valor dado usando búsqueda binaria
objeto función de algoritmo)
ranges::lower_bound
(C++20)&
encuentra el primer elemento mayor que el valor dado usando búsqueda binaria
objeto función de algoritmo)
std::forward_list<T,Allocator>ranges::upper_bound

binary_searchstd::list<T,Allocator>determina si un elemento existe en un rango usando búsqueda binaria
objeto función de algoritmo)
&ranges::binary_search
encuentra el rango de elementos que coinciden con el valor dado usando búsqueda binaria
(plantilla de función & objeto función de algoritmo)
ranges::equal_range

merge&fusiona dos rangos ordenados
objeto función de algoritmo)
ranges::merge
(C++20)&
fusiona dos listas ordenadas
)
&merge
(función miembro pública de

inplace_merge&fusiona dos rangos ordenados en el lugar
objeto función de algoritmo)
ranges::inplace_merge
(C++20)&
determina si una secuencia es una subsecuencia de otra
objeto función de algoritmo)
&ranges::includes
calcula la diferencia entre dos conjuntos
(plantilla de función & objeto función de algoritmo)
ranges::set_difference

set_intersection&calcula la intersección de dos conjuntos
objeto función de algoritmo)
ranges::set_intersection
(C++20)
&set_symmetric_difference
ranges::set_symmetric_difference
(C++20)&
calcula la unión de dos conjuntos
objeto función de algoritmo)
&ranges::set_union
agrega un elemento a un montículo máximo
(plantilla de función & objeto función de algoritmo)
ranges::push_heap

pop_heap&elimina el elemento más grande de un montículo máximo
objeto función de algoritmo)
ranges::pop_heap
(C++20)&
crea un montículo máximo a partir de un rango de elementos
objeto función de algoritmo)

ranges::make_heap&(C++20)
sort_heap
objeto función de algoritmo)
&ranges::sort_heap
(C++11)
comprueba si el rango dado es un montículo máximo&(plantilla de función
(C++20)
&is_heap_until
encuentra el mayor subrango que es un montículo máximo
objeto función de algoritmo)
&ranges::is_heap_until

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