我想将一个std :: map的内容复制到另一个。我可以使用std::copy
吗?显然,下面的代码将无法正常工作:如何使用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;
}
这不会起作用,因为copy
会调用operator*
上m2.begin()
为“解引用”,并分配一个值(所有值都是std::pair<const int, double>
类型)。然后它会呼叫operator++
移动到m2
的下一个空间。由于const int
中的const
这两个操作都不起作用,并且没有为任何新元素保留空间。
有什么办法可以使它与std::copy
一起工作?
谢谢!
+1的确,更清洁。 – GManNickG 2010-05-01 00:04:48
好吧,如果你要避免使用std :: copy,为什么不使用copy c'tor? m2 = m1。编辑:啊,他想要价值的联合。 – Stephen 2010-05-01 00:08:14
@Stephen:因为使用'insert'保留'm2'内的现有内容。使用copy * assignment *操作符会破坏'm2'中的现有内容。 – 2010-05-01 00:09:39