c++ - tutorial - solidity editor online




¿Puedo mover-asignar el contenido de un std:: map a otro std:: map? (2)

No creo que esto sea posible. Con otros contenedores, sugeriría el adaptador std::move_iterator , pero eso no funciona porque la clave de un mapa es const.

En otras palabras, no puede mover elementos uno a uno de un mapa porque eso podría cambiar las claves, lo que un mapa no permite.

Y no hay manera de simplemente mover en masa de un mapa a otro. Las listas admiten el empalme, pero me temo que los árboles no.

¿Es posible insertar el contenido de un std :: map temp en otro std :: map m usando la semántica de movimientos, de modo que los valores del temporal no se copien y se reutilicen?

Digamos que uno tiene:

std::map<int, Data> temp;
std::map<int, Data> m;

Una forma de copiar valores de temp en m es:

m.insert(temp.begin(),temp.end());

¿Cómo puedo mover los elementos temp a m , en lugar de copiar?


No lo he intentado, pero creo que std::move_iterator debería ayudar aquí:

 using it = std::map<int, Data>::iterator;
 using mv = std::move_iterator <it>;

 m.insert(mv(temp.begin()),mv(temp.end()));




move-semantics