std::unordered_set<Key,Hash,KeyEqual,Allocator>::operator=
De cppreference.com
< cpp | container | unordered set
unordered_set& operator=( const unordered_set& other ); |
(1) | (desde C++11) |
(2) | ||
unordered_set& operator=( unordered_set&& other ); |
(desde C++11) (hasta C++17) |
|
unordered_set& operator=( unordered_set&& other ) noexcept(/* véase más abajo */); |
(desde C++17) | |
unordered_set& 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
.
Excepciones2)
Especificación noexcept: (desde C++11)
|
(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 std::unordered_set a otro:
Ejecuta este código
#include <unordered_set> #include <iostream> // Muestra el tamaño de los contenedores void mostrar_tam(const std::unordered_set<int> &nums1, const std::unordered_set<int> &nums2, const std::unordered_set<int> &nums3) { std::cout << "nums1: " << nums1.size() << " nums2: " << nums2.size() << " nums3: " << nums3.size() << '\n'; } int main() { std::unordered_set<int> nums1 {3, 1, 4, 6, 5, 9}; std::unordered_set<int> nums2; std::unordered_set<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_set . (función miembro pública) |