Namespaces
Variants

std:: flat_multimap

From cppreference.net
Definido en el encabezado <flat_map>
template <

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

> class flat_multimap ;
(desde C++23)

El flat multimap es un container adaptor que proporciona la funcionalidad de un contenedor asociativo que contiene pares clave-valor, permitiendo múltiples entradas con el mismo valor de clave. Las claves se ordenan utilizando la función de comparación Compare .

La plantilla de clase flat_multimap actúa como un contenedor envolvente para los dos contenedores subyacentes, pasados como objetos de tipo KeyContainer y MappedContainer respectivamente. El primer contenedor está ordenado, y para cada clave su valor correspondiente se encuentra en el segundo contenedor en el mismo índice (desplazamiento). El número de elementos en ambos contenedores es el mismo.

En todas partes donde la biblioteca estándar utiliza los Compare requisitos, la unicidad se determina utilizando la relación de equivalencia. Informalmente, dos objetos a y b se consideran equivalentes si ninguno es menor que el otro: ! comp ( a, b ) && ! comp ( b, a ) .


std::flat_multimap cumple con los requisitos de Container , ReversibleContainer , requisitos opcionales de contenedor , y todos los requisitos de AssociativeContainer (incluyendo complejidad de búsqueda logarítmica), excepto que:

  • los requisitos relacionados con 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 multimapa plano admite la mayoría de las operaciones de AssociativeContainer que utilizan claves iguales.

Todas las funciones miembro de std::flat_multimap son constexpr : es posible crear y utilizar objetos std::flat_multimap en la evaluación de una expresión constante.

Sin embargo, los objetos std::flat_multimap generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(since C++26)

Contenidos

Invalidación de iteradores

Parámetros de plantilla

Key - El tipo de las claves. El programa está mal formado si Key no es del mismo tipo que KeyContainer::value_type .
T - El tipo de los valores mapeados. El programa está mal formado si T no es del mismo tipo que MappedContainer::value_type .
Compare - Un tipo Compare que proporciona un ordenamiento débil estricto.
KeyContainer
MappedContainer
- Los tipos de los SequenceContainer subyacentes para almacenar claves y valores mapeados respectivamente. Los iteradores de dichos contenedores deben satisfacer LegacyRandomAccessIterator o modelar random_access_iterator . Las invocaciones de sus funciones miembro size y max_size no deben salir mediante una excepción.

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

Tipos de miembros

Tipo Definición
key_container_type KeyContainer
mapped_container_type MappedContainer
key_type Key
mapped_type T
value_type std:: pair < key_type, mapped_type >
key_compare Compare
reference std:: pair < const key_type & , mapped_type & >
const_reference std:: pair < const key_type & , const mapped_type & >
size_type std::size_t
difference_type std::ptrdiff_t
iterator definido por la implementación LegacyInputIterator , ConstexprIterator (desde C++26) y random_access_iterator a value_type
const_iterator definido por la implementación LegacyInputIterator , ConstexprIterator (desde C++26) y random_access_iterator a const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >
containers tipo que describe los contenedores subyacentes

struct containers
{
key_container_type keys ;
mapped_container_type values ;
} ;

Clases miembro

compara objetos de tipo value_type
(clase)

Objetos miembro

Miembro Descripción
containers c (privado) los contenedores adaptados
( objeto miembro solo para exposición* )
key_compare compare (privado) el objeto función de comparación
( objeto miembro solo para exposición* )

Funciones miembro

construye el flat_multimap
(función miembro pública)
(destructor)
(implicitly declared)
destruye cada elemento del adaptador de contenedor
(función miembro pública)
asigna valores al adaptador de contenedor
(función miembro pública)
Iteradores
devuelve un iterador al inicio
(función miembro pública)
devuelve un iterador al final
(función miembro pública)
devuelve un iterador inverso al principio
(función miembro pública)
devuelve un iterador inverso al final
(función miembro pública)
Capacidad
comprueba si el adaptador de contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
devuelve el número máximo posible de elementos
(función miembro pública)
Modificadores
construye el elemento in situ
(función miembro pública)
construye elementos in-situ usando una pista
(función miembro pública)
inserta elementos
(función miembro pública)
inserta un rango de elementos
(función miembro pública)
extrae los contenedores subyacentes
(función miembro pública)
reemplaza los contenedores subyacentes
(función miembro pública)
elimina elementos
(función miembro pública)
intercambia los contenidos
(función miembro pública)
borra el contenido
(función miembro pública)
Búsqueda
encuentra elemento con clave específica
(función miembro pública)
devuelve el número de elementos que coinciden con una clave específica
(función miembro pública)
verifica si el contenedor contiene un elemento con clave específica
(función miembro pública)
devuelve un iterador al primer elemento no menor que la clave dada
(función miembro pública)
devuelve un iterador al primer elemento mayor que la clave dada
(función miembro pública)
devuelve el rango de elementos que coinciden con una clave específica
(función miembro pública)
Observadores
devuelve la función que compara claves
(función miembro pública)
devuelve la función que compara claves en objetos de tipo value_type
(función miembro pública)
acceso directo al contenedor subyacente de claves
(función miembro pública)
acceso directo al contenedor de valores subyacente
(función miembro pública)

Funciones no miembro

compara lexicográficamente los valores de dos flat_multimap s
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)
borra todos los elementos que cumplen criterios específicos
(plantilla de función)

Clases auxiliares

especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)

Etiquetas

indica que los elementos de un rango están ordenados (no se requiere unicidad)
(etiqueta)

Guías de deducción

Notas

Los tipos miembro iterator y const_iterator pueden ser alias del mismo tipo. Esto significa que definir un par de sobrecargas de funciones usando los dos tipos como tipos de parámetro puede violar la One Definition Rule . Dado que iterator es convertible a const_iterator , una única función con un const_iterator como tipo de parámetro funcionará en su lugar.

Macro de prueba de características Valor Estándar Característica
__cpp_lib_flat_map 202207L (C++23) std::flat_map y std::flat_multimap
__cpp_lib_constexpr_flat_map 202502L (C++26) constexpr std::flat_multimap

Ejemplo

Véase también

(C++23)
adapta dos contenedores para proporcionar una colección de pares clave-valor, ordenados por claves únicas
(plantilla de clase)
colección de pares clave-valor, ordenados por claves
(plantilla de clase)
colección de pares clave-valor, dispersos por claves
(plantilla de clase)