Ich möchte den Inhalt einer std :: map in eine andere kopieren. Kann ich std::copy
dafür verwenden? Offensichtlich wird der folgende Code nicht:Wie kann ich mit std :: copy eine Karte in eine andere kopieren?
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;
}
Das wird nicht funktionieren, weil copy
operator*
auf m2.begin()
nennen wird „dereferenzieren“ es und einen Wert zuweisen (alle Werte sind vom Typ std::pair<const int, double>
). Dann wird operator++
aufgerufen, um zum nächsten Leerzeichen in m2
zu wechseln. Diese beiden Operationen funktionieren nicht wegen der const
in const int
und es ist kein Platz für neue Elemente reserviert.
Gibt es eine Möglichkeit, es mit std::copy
arbeiten zu lassen?
Danke!
+1 In der Tat, viel sauberer. – GManNickG
Nun, wenn Sie vermeiden werden, std :: copy zu benutzen, warum benutzen Sie nicht einfach den copy c'tor? m2 = m1. edit: Ah, er will die Vereinigung von Werten. – Stephen
@Stephen: Da mit 'insert' der vorhandene Inhalt in' m2' beibehalten wird. Mit dem Operator copy * assignment * wird der vorhandene Inhalt in 'm2' gelöscht. –