C++ multimap swap() 函数
C++ multimap swap() 函数用于交换两个multimap的内容,但两个multimap必须是 同一类型 ,尽管它们的大小可能不同。
语法
void swap (multimap& x);
参数
x :用于交换内容的multimap容器。
返回值
无
复杂度
常数时间。
迭代器有效性
所有指向两个容器中元素的迭代器、引用和指针仍然有效,但现在指向另一个容器中的元素,并在该容器中迭代。
数据竞争
容器和x都被修改。
异常安全性
如果抛出异常,对容器没有影响。
示例1
让我们来看一个简单的示例,将一个multimap的元素与另一个交换:
#include <iostream>
#include <map>
using namespace std;
int main(void) {
multimap<char, int> m1 = {
{'a', 1},
{'b', 2},
{'c', 3},
{'b', 4},
{'c', 5},
};
multimap<char, int> m2;
m2.swap(m1);
cout << "Multimap m2 contains following elements" << endl;
for (auto it = m2.begin(); it != m2.end(); ++it)
cout << it->first << " = " << it->second << endl;
return 0;
}
输出:
Multimap m2 contains following elements
a = 1
b = 2
b = 4
c = 3
c = 5
在上面的示例中,multimap m1有五个元素,而m2是空的。当你将m1与m2交换时,m1的所有元素都被交换到m2中。
示例2
让我们看一个简单的示例来交换两个multimap的内容:
#include <iostream>
#include <map>
using namespace std;
int main ()
{
multimap<char,int> multimap1,multimap2;
multimap1 = {
{'x', 100},
{'x', 200}
};
multimap2 = {
{'a', 110},
{'b', 220},
{'a', 330}
};
multimap1.swap(multimap2);
cout << "multimap1 contains:\n";
for (multimap<char,int>::iterator it=multimap1.begin(); it!=multimap1.end(); ++it)
cout << it->first << " => " << it->second << '\n';
cout << "multimap2 contains:\n";
for (multimap<char,int>::iterator it=multimap2.begin(); it!=multimap2.end(); ++it)
cout << it->first << " => " << it->second << '\n';
return 0;
}
输出:
multimap1 contains:
a => 110
a => 330
b => 220
multimap2 contains:
x => 100
x => 200
在上面的示例中,两个multimap(multimap1和multimap2)的内容互相交换。
示例3
让我们看一个简单的示例来交换两个multimap的内容:
#include<iostream>
#include<map>
using namespace std;
int main()
{
// Take any two multimaps
multimap<int, char> multimap1, multimap2;
multimap1 = {
{1, 'a'},
{2, 'b'},
{2, 'c'},
{4, 'd'} };
multimap2 = {
{1, 'x'},
{2, 'y'},
{2, 'z'} };
// Swap elements of multimaps
swap(multimap1, multimap2);
// Print the elements of multimaps
cout << "multimap1:\n"<< "\tKEY\tELEMENT\n";
for (auto it = multimap1.begin();
it != multimap1.end(); it++)
cout << "\t" << it->first << "\t" << it->second << '\n';
cout << "multimap2:\n"<< "\tKEY\tELEMENT\n";
for (auto it = multimap2.begin();
it != multimap2.end(); it++)
cout << "\t" << it->first << "\t" << it->second << '\n';
return 0;
}
输出:
multimap1:
KEY ELEMENT
1 x
2 y
2 z
multimap2:
KEY ELEMENT
1 a
2 b
2 c
4 d
在上面的示例中,使用另一种形式的swap()函数来交换两个multimap的内容。
示例4
让我们看一个简单的示例:
#include <iostream>
#include <string>
#include <map>
using namespace std;
void show(const char *msg, multimap<string, int> mp);
int main() {
multimap<string, int> m1, m2;
m1.insert(pair<string, int>("A", 100));
m1.insert(pair<string, int>("B", 300));
m1.insert(pair<string, int>("B", 200));
// Exchange the contents of m1 and m2.
cout << "Exchange m1 and m2.\n";
m1.swap(m2);
show("Contents of m2: ", m2);
show("Contents of m1: ", m1);
// Clear m1.
m1.clear();
if(m1.empty()) cout << "m1 is now empty.";
return 0;
}
// Display the contents of a multimap<string, int> by using an iterator.
void show(const char *msg, multimap<string, int> mp) {
multimap<string, int>::iterator itr;
cout << msg << endl;
for(itr=mp.begin(); itr != mp.end(); ++itr)
cout << " " << itr->first << ", " << itr->second << endl;
cout << endl;
}
输出:
Exchange m1 and m2.
Contents of m2:
A, 100
B, 300
B, 200
Contents of m1:
m1 is now empty.
在上述示例中,multimap m1的内容被交换到multimap m2中,交换后,m1 multimap被清空。