Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: insert

From cppreference.net
std:: pair < iterator, bool > insert ( const value_type & value ) ;
(1) (desde C++23)
std:: pair < iterator, bool > insert ( value_type && value ) ;
(2) (desde C++23)
iterator insert ( const_iterator pos, const value_type & value ) ;
(3) (desde C++23)
iterator insert ( const_iterator pos, value_type && value ) ;
(4) (desde C++23)
template < class P >
std:: pair < iterator, bool > insert ( P && x ) ;
(5) (desde C++23)
template < class P >
iterator insert ( const_iterator pos, P && x ) ;
(6) (desde C++23)
template < class InputIt >
void insert ( InputIt first, InputIt last ) ;
(7) (desde C++23)
template < class InputIt >
void insert ( std:: sorted_unique_t , InputIt first, InputIt last ) ;
(8) (desde C++23)
void insert ( std:: initializer_list < key_type > ilist ) ;
(9) (desde C++23)
void insert ( std:: sorted_unique_t s, std:: initializer_list < key_type > ilist ) ;
(10) (desde C++23)

Inserta elemento(s) en el contenedor, si el contenedor no contiene ya un elemento con una clave equivalente.

1) Inserta value . Equivalente a return emplace ( value ) ; .
2) Inserta value . Equivalente a return emplace ( std :: move ( value ) ) ; .
3) Inserta value en la posición más cercana posible a la posición inmediatamente anterior a pos . Equivalente a return emplace_hint ( pos, value ) ; .
4) Inserta value en la posición más cercana posible a la posición inmediatamente anterior a pos . Equivalente a return emplace_hint ( pos, std :: move ( value ) ) ; .
5) Si * this ya contiene un elemento que se compara transparentemente equivalente a x , no hace nada. De lo contrario, inserta x en * this como si fuera mediante emplace ( std:: forward < P > ( x ) ) ; . Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > es true .
6) Si * this ya contiene un elemento que se compara transparentemente equivalente a x , no hace nada. De lo contrario, inserta x en * this en la posición más cercana posible a la posición inmediatamente anterior a pos . Equivalente a return emplace_hint ( pos, std:: forward < P > ( x ) ) ; . Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > es true .
7) Inserta elementos del rango [ first , last ) como si realizara las siguientes operaciones secuencialmente:
  1. Añade elementos a c como si fuera mediante
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Ordena el rango de elementos recién insertados con respecto a value_comp .
  3. Combina el rango ordenado resultante y el rango ordenado de elementos preexistentes en un único rango ordenado.
  4. Elimina los elementos duplicados como si fuera mediante:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Puede asignar memoria durante la operación de fusión in situ.
Si múltiples elementos en el rango tienen claves que son equivalentes en la comparación, no está especificado qué elemento se inserta (pendiente de LWG2844 ).
8) Inserta elementos del rango [ first , last ) como si realizara las siguientes operaciones secuencialmente:
  1. Añade elementos a c como si fuera mediante
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Combina el rango ordenado de elementos recién añadidos y el rango ordenado de elementos preexistentes en un único rango ordenado.
  3. Elimina los elementos duplicados como si fuera mediante:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Puede asignar memoria durante la operación de fusión in situ.
Si múltiples elementos en el rango tienen claves que son equivalentes en la comparación, no está especificado qué elemento se inserta (pendiente de LWG2844 ).
9) Inserta elementos desde la lista de inicialización ilist . Equivalente a insert ( ilist. begin ( ) , ilist. end ( ) ) ; .
Si múltiples elementos en el rango tienen claves que son equivalentes en la comparación, no está especificado qué elemento se inserta (pendiente de LWG2844 ).
10) Inserta elementos desde la lista de inicialización ilist . Equivalente a insert ( s, ilist. begin ( ) , ilist. end ( ) ) ; .
Si múltiples elementos en el rango tienen claves que son equivalentes en la comparación, no está especificado qué elemento se inserta (pendiente de LWG2844 ).

Contenidos

Parámetros

pos - un iterador a la posición antes de la cual se insertará el nuevo elemento
value - un valor de elemento a insertar
first, last - el par de iteradores que define el rango fuente de elementos a insertar
ilist - una lista de inicializadores de la cual insertar los valores
x - un valor de cualquier tipo que pueda compararse transparentemente con una clave
s - una etiqueta de desambiguación que indica que la secuencia de entrada está ordenada (con respecto a value_comp() ) y contiene solo elementos únicos
Requisitos de tipo
-
InputIt debe cumplir con los requisitos de LegacyInputIterator .

Valor de retorno

1,2) Un par que consiste en un iterador al elemento insertado (o al elemento que impidió la inserción) y un valor bool establecido en true si y solo si la inserción tuvo lugar.
3,4) Un iterador al elemento insertado, o al elemento que impidió la inserción.
5) Un par que consiste en un iterador al elemento insertado (o al elemento que impidió la inserción) y un valor bool establecido en true si y solo si la inserción tuvo lugar.
6) Un iterador al elemento insertado, o al elemento que impidió la inserción.
7-10) (ninguno)

Excepciones

1-6) Si se lanza una excepción por cualquier operación, la inserción no tiene efecto.

Complejidad

1-6) Lineal en size() .
7) N + M·log ( M ) , donde N es el size() antes de la operación y M es std:: distance ( first, last ) .
8) Lineal en size() .
9) N + M·log ( M ) , donde N es el size() antes de la operación y M es ilist. size ( ) .
10) Lineal en N , donde N es size() después de la operación.

Notas

La inserción con sugerencia ( ( 3,4 ) y ( 6 ) ) no devuelve un booleano para ser compatible en firma con la inserción posicional en contenedores secuenciales, como std::vector::insert . Esto hace posible crear insertores genéricos como std::inserter . Una forma de verificar el éxito de una inserción con sugerencia es comparar size() antes y después.

Ejemplo

Véase también

construye elemento in-situ
(función miembro pública)
construye elementos in-situ usando una pista
(función miembro pública)
inserta un elemento o asigna al elemento actual si la clave ya existe
(función miembro pública)
crea un std::insert_iterator del tipo inferido del argumento
(plantilla de función)