开发者

How can I copy one map into another using std::copy?

开发者 https://www.devze.com 2022-12-28 15:08 出处:网络
I would like to copy the content of one std::map into another. Can I use std::copy for that? Obviously, the following code won\'t work:

I would like to copy the content of one std::map into another. Can I use std::copy for that? Obviously, the following code won't work:

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;
}

This won't work because copy will call ope开发者_C百科rator* on m2.begin() to "dereference" it and assign a value (all values are of type std::pair<const int, double>). Then it will call operator++ to move to the next space in m2. Both of these operations don't work because of the const in const int and there is no space reserved for any new elements.

Is there any way to make it work with std::copy?

Thanks!


You can use GMan's answer --- but the question is, why do you want to use std::copy? You should use the member function std::map<k, v>::insert instead.

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


You need a variant of an insert iterator:

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

inserter is defined in <iterator>. It requires a place to insert into (hence the m2.end()), and returns an insert_iterator.


UPDATE: C++ 98 introduced the '=' operator, which copies the elements from the left into the container. {map& operator= (const map& x);}

C++ 11 added move semantics to move all the elements from the left container {map& operator= (map&& x);}

and initializer list assignment {map& operator= (initializer_list<value_type> il); }

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

0

精彩评论

暂无评论...
验证码 换一张
取 消