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!
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());
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
.
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