如何使用std :: copy将一个地图复制到另一个地图?

时间:2010-04-30 23:56:50

标签: c++ stl map iterator copy

我想将一个std :: map的内容复制到另一个。我可以使用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中的const int并且没有为任何新元素保留空间,因此这两个操作都不起作用。

有没有办法让它与std::copy一起使用?

谢谢!

3 个答案:

答案 0 :(得分:71)

你可以使用GMan的答案---但问题是,为什么你想使用std::copy?您应该使用成员函数std::map<k, v>::insert代替。

m2.insert(m1.begin(), m1.end());

答案 1 :(得分:20)

您需要insert iterator的变体:

std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()) );

inserter<iterator>中定义。它需要插入一个位置(因此m2.end()),并返回insert_iterator

答案 2 :(得分:0)

更新: C++ 98 引入了 '=' 运算符,它将元素从左侧复制到容器中。 {map& operator= (const map& x);}

C++ 11 添加了移动语义以移动左侧容器中的所有元素 {map& operator= (map&& x);}

和初始化列表赋值 {map& operator= (initializer_list il); }

https://www.cplusplus.com/reference/map/map/operator=/