How can I copy one map into another using std::copy?
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=/
精彩评论