std::flat_set<Key,Compare,KeyContainer>::insert
De cppreference.com
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 K > iterator insert( const_iterator pos, K&& x ); |
(5) | (desde C++23) |
template< class InputIt > void insert( InputIt first, InputIt last ); |
(6) | (desde C++23) |
template< class K > std::pair<iterator, bool> insert( K&& x ); |
(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 lo más cercana posible a la posición justo antes de pos. Equivalente a return emplace_hint(pos, value);.
4) Inserta value en la posición lo más cercana posible a la posición justo antes de pos. Equivalente a return emplace_hint(pos, std::move(value));.
5,7) Si *this ya contiene un elemento que se compara de forma transparente con x, no hace nada. De lo contrario, inserta un nuevo elemento como si fuera:
- (5) emplace(pos, std::forward<K>(x)) (en la posición más cercana posible a la posición inmediatamente anterior a pos);
- (7) emplace(std::forward<K>(x)).
La conversión de x en
key_type
debe construir un objeto u, para el cual find(k) == find(u) es true. De lo contrario, el comportamiento no está definido. Estas sobrecargas solo participan en la resolución de sobrecargas si
- El identificador calificado
Compare::is_transparent
es válido y denota un tipo, y - std::is_constructible_v<value_type, K> es true,
Key
.6) Equivale a la secuencia de operaciones:
- Inserta elementos del rango
[
first,
last)
como si fuera por c.insert(c.end(), first, last);. - Ordena el rango de elementos recién insertados con respecto a
compare
. - Fusiona el rango ordenado resultante y el rango ordenado de elementos preexistentes en un único rango ordenado. (Nota: la operación de fusión puede asignar memoria).
- Borra todos los elementos excepto el primero de cada grupo de elementos equivalentes consecutivos.
Si varios elementos en el rango tienen claves que se comparan equivalentes, no se especifica qué elemento se inserta (pendiente de la resolución de LWG2844).
8) Inserta elementos del rango
[
first,
last)
. Equivalente a insert(first, last);. Si varios elementos en el rango tienen claves que se comparan equivalentes, no se especifica qué elemento se inserta (pendiente de la resolución de LWG2844).
9) Inserta elementos de la lista de inicializadores ilist. Equivalente a insert(ilist.begin(), ilist.end());.
Si varios elementos en el rango tienen claves que se comparan equivalentes, no se especifica qué elemento se inserta (pendiente de la resolución de LWG2844).
10) Inserta elementos de la lista de inicializadores ilist. Equivalente a insert(s, ilist.begin(), ilist.end());.
Si varios elementos en el rango tienen claves que se comparan equivalentes, no se especifica qué elemento se inserta (pendiente de la resolución de LWG2844).
La información sobre la invalidación del iterador se copia de aquí
Contenido |
[editar] Parámetros
pos | - | Iterador de la posición antes de la cual se insertará el nuevo elemento. |
value | - | Valor del elemento a insertar. |
first, last | - | El par de iteradores que definen el fuente rango fuente de elementos a insertar |
ilist | - | Lista de inicializadores desde la cual insertar los valores. |
x | - | Un valor de cualquier tipo que se pueda comparar de forma transparente con una clave |
s | - | Una etiqueta de desambiguación que indica que la secuencia de entrada está ordenada (con respecto a compare ) y contiene solo elementos únicos
|
Requisitos de tipo | ||
-InputIt debe satisfacer los requisitos de IteradorDeEntradaLegado.
|
[editar] Valor de retorno
1,2) Un par que consta de un iterador al elemento insertado (o al elemento que impidió la inserción) y un valor bool establecido en true si y solo si se produjo la inserción.
3-5) Un iterador al elemento insertado o al elemento que impidió la inserción.
6) (Ninguno)
7) Un par que consta de un iterador al elemento insertado (o al elemento que impidió la inserción) y un valor bool establecido en true si y solo si se produjo la inserción.
8-10) (Ninguno)
[editar] Excepciones
1-5,7) Si cualquier operación genera una excepción, la inserción no tiene efecto.
Esta sección está incompleta Razón: cases 6,8-10 |
[editar] Complejidad
1-5) Lineal en
size()
.6) N + M·log(M), donde
N
es el tamaño, size()
antes de la operación y M
es std::distance(first, last).7) Lineal en
size()
.Esta sección está incompleta Razón: volver a verificar la complejidad: 1-5, 7, 9, 10. La búsqueda es log(N), pero la inserción en el contenedor subyacente es N/2 en promedio => Lineal. |
[editar] Notas
La inserción con pista o sugerencia (3-5) no devuelve un valor booleano para ser compatible con la signatura de la inserción posicional en contenedores secuenciales, como std::vector::insert. Esto hace posible crear insertadores genéricos como std::inserter. Una forma de comprobar el éxito de una inserción con pista o sugerencia es comparar size()
antes y después.
[editar] Ejemplo
Ejecuta este código
#include <cassert> #include <flat_set> #include <iostream> int main() { std::flat_set<int> set; auto result_1 = set.insert(3); assert(result_1.first != set.end()); // es un iterador válido assert(*result_1.first == 3); if (result_1.second) std::cout << "hubo inserción\n"; auto result_2 = set.insert(3); assert(result_2.first == result_1.first); // el mismo iterador assert(*result_2.first == 3); if (!result_2.second) std::cout << "no hubo inserción\n"; }
Salida:
hubo inserción no hubo inserción
[editar] Véase también
(C++11) |
Construye el elemento en el sitio. (función miembro pública) |
(C++11) |
Construye elementos en el sitio utilizando una pista. (función miembro pública) |
Crea un std::insert_iterator de tipo inferido a partir del argumento. (plantilla de función) |