Для того, что бы поменять содержимое контейнеров местами, можно использовать следующий код:
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
.