Espacios de nombres
Variantes
Acciones

std::flat_set

De cppreference.com
< cpp‎ | container
 
 
 
 
Definido en el archivo de encabezado <flat_set>
template<

    class Key,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>

> class flat_set;
(desde C++23)

El conjunto plano es un adaptador de contenedor que proporciona la funcionalidad de un contenedor asociativo que almacena un conjunto ordenado de objetos únicos de tipo Key. La ordenación se realiza mediante la función de comparación de claves Compare.

La plantilla de clase flat_set actúa como un contenedor para el contenedor ordenado subyacente que se pasa como objeto de tipo KeyContainer.

En todos los lugares donde la biblioteca estándar utiliza los requisitos Comparar, la unicidad se determina mediante la relación de equivalencia. De manera informal, dos objetos a y b se consideran equivalentes si ninguno se compara menor que el otro: !comp(a, b) && !comp(b, a).

std::flat_set cumple con los requisitos de Contenedor, ContenedorReversible, requisitos de contenedor opcionales y todos los requisitos de ContenedorAsociativo (incluida la complejidad de búsqueda logarítmica), excepto que:

  • los requisitos relacionados con los nodos no son aplicables,
  • los requisitos de invalidación de iteradores difieren,
  • la complejidad de las operaciones de inserción y borrado es lineal.

Un conjunto plano admite la mayoría de las operaciones de ContenedorAsociativo que usan claves únicas.

Contenido

[editar] Invalidación de iteradores

[editar] Parámetros de plantilla

Key - El tipo de los elementos almacenados. El programa no está bien formado si Key no es del mismo tipo que KeyContainer::value_type.
Compare - Un tipo Comparar que proporciona un ordenamiento débil estricto.
KeyContainer - El tipo del ContenedorDeSecuencia subyacente para almacenar los elementos. Los iteradores de dicho contenedor deben satisfacer IteradorDeAccesoAleatorioLegado o modelar random_access_iterator.

Los contenedores estándar std::vector y std::deque satisfacen estos requisitos.


[editar] Tipos miembro

Tipo Definición
container_type Container [editar]
key_type Key [editar]
key_compare Compare [editar]
value_compare Compare [editar]
reverse_iterator std::reverse_iterator<iterator> [editar]
const_reverse_iterator std::reverse_iterator<const_iterator> [editar]

[editar] Objetos miembro

Miembro Descripción
c (private) El contenedor adaptado.
(objeto miembro solo de exposición*)
compare (private) El objeto función de comparación.
(objeto miembro solo de exposición*)

[editar] Funciones miembro

Construye el contenedor flat_set.
(función miembro pública) [editar]
(destructor)
(implícitamente declarado)
Destruye todos los elementos del adaptador de contenedor.
(función miembro pública)
(C++23)
Asigna valores al contenedor.
(función miembro pública) [editar]
Iteradores
Devuelve un iterador al principio.
(función miembro pública) [editar]
(C++11)
Devuelve un iterador al final.
(función miembro pública) [editar]
Devuelve un iterador inverso al principio.
(función miembro pública) [editar]
Devuelve un iterador inverso al final.
(función miembro pública) [editar]
Capacidad
(C++23)
Comprueba si el contenedor está vacío.
(función miembro pública) [editar]
(C++23)
Devuelve el número de elementos.
(función miembro pública) [editar]
(C++23)
Devuelve el número máximo posible de elementos.
(función miembro pública) [editar]
Modificadores
(C++11)
Construye el elemento en el sitio.
(función miembro pública) [editar]
Construye elementos en el sitio utilizando una pista.
(función miembro pública) [editar]
(C++23)
Inserta elementos
(función miembro pública) [editar]
Inserta un rango de elementos.
(función miembro pública) [editar]
(C++17)
Extrae nodos del contenedor
(función miembro pública) [editar]
Reemplaza el contenedor subyacente.
(función miembro pública) [editar]
(C++23)
Borra elementos
(función miembro pública) [editar]
(C++23)
Intercambia el contenido.
(función miembro pública) [editar]
(C++23)
Borra el contenido.
(función miembro pública) [editar]
Búsqueda
(C++23)
Encuentra un elemento con una clave específica.
(función miembro pública) [editar]
(C++23)
Devuelve el número de elementos que coinciden con una clave específica.
(función miembro pública) [editar]
(C++20)
Comprueba si el contenedor contiene un elemento con una clave específica.
(función miembro pública) [editar]
Devuelve un iterador al primer elemento no menor que la clave dada.
(función miembro pública) [editar]
Devuelve un iterador al primer elemento mayor que la clave dada.
(función miembro pública) [editar]
Devuelve un rango de elementos que coinciden con una clase específica.
(función miembro pública) [editar]
Observadores
Devuelve la función que compara las claves.
(función miembro pública) [editar]
Devuelve la función que compara las claves en objetos de tipo value_type.
(función miembro pública) [editar]

[editar] Funciones no miembro

(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(C++20)
Compara lexicográficamente los valores de flat_set.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Borra todos los elementos que satisfacen un criterio específico.
(plantilla de función) [editar]

[editar] Clases auxiliares

Especializa el rasgo de tipo std::uses_allocator.
(plantilla de función) [editar]

[editar] Etiquetas

Indica que los elementos de un rango están ordenados y son únicos.
(tag)[editar]

[editar] Guías de deducción

[editar] Notas

Los tipos miembro iterator y const_iterator pueden ser alias del mismo tipo. Esto significa que definir un par de sobrecargas de función utilizando los dos tipos como tipos de parámetro puede violar la Regla de una definición (ODR). Dado que iterator es convertible a const_iterator, una sola función con un const_iterator como tipo de parámetro funcionará en su lugar.

Algunas ventajas de los conjuntos planos sobre otros adaptadores de contenedores estándar son:

  • Búsqueda potencialmente más rápida (aunque las operaciones de búsqueda tienen complejidad logarítmica).
  • Iteración mucho más rápida: iteradores de acceso aleatorio en lugar de iteradores bidireccionales.
  • Menor consumo de memoria para objetos pequeños (y para objetos grandes si KeyContainer::shrink_to_fit() está disponible).
  • Mejor rendimiento de caché (según KeyContainer, las claves se almacenan en uno o más bloques contiguos de memoria).

Algunas desventajas de los conjuntos planos son:

  • Iteradores no estables (los iteradores se invalidan al insertar y borrar elementos).
  • No se pueden almacenar valores de tipo no copiables ni movibles.
  • Menor seguridad en caso de excepciones (los constructores de copia/movimiento pueden generar errores al cambiar valores en borrados e inserciones).
  • Inserción y borrado más lentos (es decir, lineales), especialmente para tipos no movibles.
Macro de prueba de característica
__cpp_lib_flat_set 202207L (C++23) std::flat_set y std::flat_multiset

[editar] Ejemplo

[editar] Véase también

Adapta un contenedor para que proporcione una colección de claves, ordenada por clave.
(plantilla de clase) [editar]
Colección de claves, ordenada por claves, donde las claves son únicas.
(plantilla de clase) [editar]
(desde C++11)
Colección de claves únicas, dispersas (hashed) por claves.
(plantilla de clase) [editar]