我想将一个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
一起使用?
谢谢!
答案 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