Espacios de nombres
Variantes
Acciones

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::operator=

De cppreference.com
 
 
 
 
unordered_multimap& operator=(const unordered_multimap& other );
(1) (desde C++11)
(2)
unordered_multimap& operator=( unordered_multimap&& other );
(desde C++11)
(hasta C++17)
unordered_multimap& operator=( unordered_multimap&& other )noexcept(/* véase más abajo */);
(desde C++17)
unordered_multimap& operator=(std::initializer_list<value_type> ilist );
(3) (desde C++11)

Reemplaza el contenido del contenedor.

1) Operador de asignación de copia. Reemplaza el contenido con una copia del contenido de other.Si std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value es true, el asignador de memoria destino se reemplaza con una copia del asignador de memoria fuente. Si los asignadores destino y fuente no se comparan como iguales, se usa el asignador destino (*this) para desasignar la memoria, luego se usa el asignador de other para asignarla antes de copiar los elementos.(desde C++11).
2) Operador de asignación de movimiento. Reemplaza el contenido con el de other usando semántica de movimiento (p. ej., los datos en other se mueven de other a este contenedor). Posteriormente, other se deja en un estado válido pero sin especificar. Si std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value es true, el asignador de memoria destino se reemplaza con una copia del asignador de memoria fuente. Si es false y los asignadores fuente y destino no se comparan como iguales, el asignador destino no puede adueñarse de la memoria del asignador fuente y debe asignar cada elemento individualmente mediante movimiento, asignando memoria adicional usando su propio asignador a medida que sea necesario. En cualquier caso, todos los elementos presentes originalmente en *this ya sea se destruyen o se reemplazan por una asignación de movimiento de elemento por elemento.
3) Reemplaza el contenido con el de aquel identificado por la lista de inicializadores ilist.

Contenido

[editar]Parámetros

other - El otro contenedor a usar como fuente de datos.
ilist - La lista de inicializadores a usar como fuente de datos.

[editar]Valor de retorno

*this

[editar]Complejidad

1) Lineal con respecto al tamaño de *this y other.
2) Lineal con respecto al tamaño de *this a menos que los asignadores de memoria no se comparen como iguales y no propaguen, en cuyo caso la complejidad será lineal con respecto al tamaño de *this y other.
3) Lineal con respecto al tamaño de *this y ilist.

Excepciones

2)
Especificación noexcept:   (desde C++11)
noexcept(std::allocator_traits<Allocator>::is_always_equal::value

&&std::is_nothrow_move_assignable<Hash>::value

&&std::is_nothrow_move_assignable<Pred>::value)
(desde C++17)

[editar]Notas

Después de la asignación de movimiento de un contenedor (sobrecarga (2)), a menos que se fuerce una asignación de movimiento de elemento por elemento por causa de asignadores incompatibles, las referencias, punteros e iteradores (distintos al iterador el final) a other siguen siendo válidos, pero se refieren a los elementos que ahora se encuentran en *this. El estándar actual da esta garantía mediante una afirmación general en [container.requirements.general]/12, y una garantía más directa está bajo consideración mediante Asunto LWG 2321.

[editar]Ejemplo

El siguiente código utiliza el operador operator= para asignar un contenedor std::unordered_multimap a otro:

#include <unordered_map>#include <iostream>   // Muestra el tamaño de los contenedoresvoid mostrar_tam(conststd::unordered_multimap<int, int>&nums1, conststd::unordered_multimap<int, int>&nums2, conststd::unordered_multimap<int, int>&nums3){std::cout<<"nums1: "<< nums1.size()<<" nums2: "<< nums2.size()<<" nums3: "<< nums3.size()<<'\n';}   int main(){std::unordered_multimap<int, int> nums1 {{3, 1}, {4, 1}, {5, 9}, {6, 1}, {7, 1}, {8, 9}};std::unordered_multimap<int, int> nums2;std::unordered_multimap<int, int> nums3;   std::cout<<"Inicialmente:\n"; mostrar_tam(nums1, nums2, nums3);   // la asignación de copia copia los datos de nums1 a nums2 nums2 = nums1;   std::cout<<"Después de la asignación:\n"; mostrar_tam(nums1, nums2, nums3);   // la asignación de movimiento mueve los datos de nums1 a nums3,// modificando tanto nums1 como nums3 nums3 = std::move(nums1);   std::cout<<"Después de la asignación de movimiento:\n"; mostrar_tam(nums1, nums2, nums3);}

Salida:

Inicialmente: nums1: 6 nums2: 0 nums3: 0 Después de la asignación: nums1: 6 nums2: 6 nums3: 0 Después de la asignación de movimiento: nums1: 0 nums2: 6 nums3: 6

[editar]Véase también

Construye el contenedor unordered_multimap.
(función miembro pública)[editar]
close