Jak mogę skopiować jedną mapę na drugą używając STD:: copy?

Chciałbym skopiować zawartość jednej mapy std:: na inną. Czy mogę użyć std::copy do tego? Oczywiście poniższy kod nie będzie działał:

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

To nie zadziała, ponieważ copy wywoła operator* na m2.begin() do "dereference" i przypisze wartość (wszystkie wartości są typu std::pair<const int, double>). Następnie wywoła operator++, aby przejść do następnej spacji w m2. Obie te operacje nie działają z powodu const W const int i nie ma miejsca zarezerwowanego dla żadnych nowych elementów.

Czy Jest jakiś sposób na zrobić to z std::copy?

Dzięki!

Author: Frank, 2010-05-01

2 answers

Możesz użyć GMan ' s answer - - - ale pytanie brzmi: Dlaczego chcesz użyć std::copy? Powinieneś skorzystać z funkcji memberstd::map<k, v>::insert zamiast tego.

m2.insert(m1.begin(), m1.end());
 65
Author: Billy ONeal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-28 10:16:05

Potrzebny jest wariant insert iterator :

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

inserter jest zdefiniowana w <iterator>. Wymaga miejsca do wstawienia do (stąd m2.end()) i zwraca insert_iterator.

 19
Author: GManNickG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-30 23:58:31