3

I would like to do the following but it seems it is not possible. I am no expert on STL.

typedef std::map<int,int> CMap;

CMap m1;
m1[0] = 10;
m1[1] = 11;
m1[2] = 12;

CMap m2;
m2[20] = 30;
m2[21] = 31;
m2[22] = 32;

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

Is there a way to do this using an algorithm (C++98)? Could it be done with transform() or replace()? If yes, how?

Thanks!

Lorenz
  • 33
  • 4

1 Answers1

4

You can do this:

m2 = m1;

Or even this if you like:

m2.swap(m1);

And there is this too:

std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()));
Galik
  • 47,303
  • 4
  • 80
  • 117
  • Thanks for the answer. The first two overwrite which is good but the third will just append as I understand. Is there a way to overwrite using copy()? – Lorenz Apr 29 '15 at 07:25
  • @Lorenz You could overwrite using `std::copy()` if you created your own `iterator` as `std::insert_iterator` will only insert if there is not a value already present. TBH you might as well just write a loop as any method is going to at least require you to write a functor. If you have `C++11` a simple range based for loop would do it: `for(auto&& p: m1) m2[p.first] = p.second;` – Galik Apr 29 '15 at 07:52
  • Thanks for the answer. Did not think of the possibility to write a specific iterator. Now clear. – Lorenz Apr 29 '15 at 08:03