Для того, что бы поменять содержимое контейнеров местами, можно использовать следующий код:
map<char,int> MapFirst,MapSecond,temp; temp=MapFirst; MapFirst=MapSecond; MapSecond=temp;
Но в С++ предусмотрена для этого специальная функция map::swap(), которая позволяет менять содержимое контейнеров map и multimap местами, сейчас покажу как.
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> MapFirst;
map<char,int> MapSecond;
MapFirst['a']=1;
MapFirst['b']=2;
MapSecond['z']=23;
MapSecond['y']=22;
cout << "MapFirst keeps before swap: MapSecond keeps before swap:" << endl;
auto itMapFirst=MapFirst.begin();
auto itMapSecond=MapSecond.begin();
for(itMapFirst,itMapSecond; itMapFirst != MapFirst.end(); ++itMapFirst,++itMapSecond)
{
cout << itMapFirst->first << " : " << itMapFirst->second << "\t\t\t\t\t"
<< itMapSecond->first << " : " << itMapSecond->second <<endl;
}
swap(MapFirst,MapSecond);///обмен
cout << "MapFirst keeps after swap: MapSecond keeps after swap:" << endl;
itMapFirst=MapFirst.begin();
itMapSecond=MapSecond.begin();
for(itMapFirst,itMapSecond; itMapFirst != MapFirst.end(); ++itMapFirst,++itMapSecond)
{
cout << itMapFirst->first << " : " << itMapFirst->second << "\t\t\t\t\t"
<< itMapSecond->first << " : " << itMapSecond->second <<endl;
}
MapFirst.swap(MapSecond);///обмен
cout << "MapFirst keeps after anoter swap: MapSecond keeps after anoter swap:" << endl;
itMapFirst=MapFirst.begin();
itMapSecond=MapSecond.begin();
for(itMapFirst,itMapSecond; itMapFirst != MapFirst.end(); ++itMapFirst,++itMapSecond)
{
cout << itMapFirst->first << " : " << itMapFirst->second << "\t\t\t\t\t"
<< itMapSecond->first << " : " << itMapSecond->second <<endl;
}
return 0;
}
Вывод программы:
MapFirst keeps before swap: MapSecond keeps before swap:
a : 1 y : 22
b : 2 z : 23
MapFirst keeps after swap: MapSecond keeps after swap:
y : 22 a : 1
z : 23 b : 2
MapFirst keeps after anoter swap: MapSecond keeps after anoter swap:
a : 1 y : 22
b : 2 z : 23
В строках 10, 11 мы заполняем контейнер MapFirst, в строках 13,14 контейнер MapSecond.
Обратите внимание на еще один вариант заполнения контейнера map. В квадратных скобках мы указываем наш ключ, а после знака равенства — значение.
В строках 19-23, выводим на экран содержимое наших контейнеров. В строке 25 происходит смена элементов двух контейнеров. Теперь контейнер MapFirst содержит то, что содержал контейнер MapSecond, а MapSecond содержит значения контейнера MapFirst.
Важно: функция map::swap() работает только в случае, если контейнеры относятся к одному типу т. е., если вы напишите, что-то вроде этого:
map<char,int> MapFirst; map<char,float> MapSecond;
компилятор выдаст ошибку. Будьте внимательны, не допускайте подобного.
В строках 30-34 осуществляется вывод на экран. Альтернативный вариант функции map::swap() показан в строке 36 и вывод в строках 41-45 показывающий, что функция отработала верно. Для контейнера multimap все работает так же, как и для контейнера map.