Vorrei copiare il contenuto di una std :: map in un'altra. Posso usare std::copy
per quello? Ovviamente, il seguente codice non funzionerà:Come posso copiare una mappa in un'altra utilizzando 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;
}
Questo non funzionerà perché copy
chiamerà operator*
su m2.begin()
a "dereference" e assegnare un valore (tutti i valori sono di tipo std::pair<const int, double>
). Quindi chiamerà operator++
per passare allo spazio successivo in m2
. Entrambe queste operazioni non funzionano a causa del const
in const int
e non c'è spazio riservato per eventuali nuovi elementi.
C'è un modo per farlo funzionare con std::copy
?
Grazie!
+1 In effetti, molto più pulito. – GManNickG
Beh, se vuoi evitare di usare std :: copy, perché non usare semplicemente il copia c'tor? m2 = m1. modifica: Ah, vuole l'unione di valori. – Stephen
@Stephen: Perché l'uso di 'insert' conserva i contenuti esistenti all'interno di' m2'. Usando l'operatore * assignment * distrugge i contenuti esistenti all'interno di 'm2'. –