Me gustaría copiar el contenido de un std :: map en otro. ¿Puedo usar std::copy
para eso? Obviamente, el siguiente código no funcionará:¿Cómo puedo copiar un mapa en otro usando std :: copy?
int main() {
typedef std::map<int,double> Map;
Map m1;
m1[3] = 0.3;
m1[5] = 0.5;
Map m2;
m2[1] = 0.1;
std::copy(m1.begin(), m1.end(), m2.begin());
return 0;
}
Esto no funcionará porque copy
llamarán operator*
en m2.begin()
a "eliminar la referencia" y asignar un valor (todos los valores son de tipo std::pair<const int, double>
). Luego llamará al operator++
para pasar al siguiente espacio en m2
. Ambas operaciones no funcionan debido al const
en const int
y no hay espacio reservado para ningún elemento nuevo.
¿Hay alguna manera de hacerlo funcionar con std::copy
?
Gracias!
+1 De hecho, mucho más limpio. – GManNickG
Bueno, si vas a evitar el uso de std :: copy, ¿por qué no utilizar el copy c'tor? m2 = m1. editar: Ah, él quiere la unión de valores. – Stephen
@Stephen: Porque el uso de 'insert' conserva los contenidos existentes dentro de' m2'. El uso del operador copy * assignment * destruye los contenidos existentes dentro de 'm2'. –