#include <iostream>
#include <map>
#include <list>
#include <numeric>
#include <algorithm>
#include <iterator>
using namespace std;
typedef multimap<int, list<int>> M;
void print(M m){
M::iterator It = m.begin();
list<int>::iterator Li;
while (It != m.end()){
cout << "key:" << It->first
<< ";value:";
for (Li = It->second.begin(); Li != It->second.end(); Li++){
cout << *Li << " ";
}
It++;
}
cout << endl;
}
int main(){
list<int> L1, L2;
L1.push_back(1);
L1.push_back(2);
L1.push_back(3);
L2.push_back(5);
copy(L1.begin(), L1.end(), back_inserter(L2));
M m1, m2;
m1.insert(M::value_type(1,L1));
m2.insert(M::value_type(2,L2));
cout << "multimap m1:" << endl;
print(m1);
cout << "multimap m2:" << endl;
print(m2);
if (m1 == m2){
cout << "multimaps m1 and m2 are equal." << endl;
}
else{
cout << endl << "After m1.swap(m2)" << endl;
m1.swap(m2);
cout << "multimap m1:" << endl;
print(m1);
cout << "multimap m2:" << endl;
print(m2);
}
return 0;
}