C++ STL中的multimap::swap()
在C++ STL中,multimap是一个非常有用的容器,它允许存储键值对,且允许相同键值对的存在。multimap::swap()函数是C++ STL中multimap容器的交换函数,它可以使两个multimap容器在O(1)时间内互换内容。
multimap容器及其操作
multimap容器是一种关联式容器,它可以存储一个键值对表。multimap容器没有影响存储在其中的元素的任何顺序,因此您可以根据它们的键值对它们按任何顺序提取和访问。与map容器一样,multimap容器中也可以包含多个相同的键值对。
multimap容器定义的方式如下:
// multimap容器定义
multimap <typename T, typename U> name;
multimap容器可以使用insert()成员函数来插入元素,可以使用find()成员函数来查找元素,也可以使用erase()成员函数来删除元素。
插入元素
在multimap容器中,可以使用insert()成员函数来插入键值对。这个成员函数有几种不同的方式,可以接受键值对、迭代器对或初始化列表。
以下是向multimap容器中插入元素的示例代码:
// multimap容器插入元素
#include <iostream>
#include <map>
int main() {
std::multimap <int, char> m;
m.insert(std::make_pair(1, 'a'));
m.insert(std::make_pair(2, 'b'));
m.insert(std::make_pair(3, 'c'));
m.insert(std::make_pair(3, 'd'));
std::multimap <int, char>::iterator itr;
std::cout << "Multimap contains:\n";
for (itr = m.begin(); itr != m.end(); ++itr) {
std::cout << itr->first << "->" << itr->second << '\n';
}
return 0;
}
输出:
Multimap contains:
1->a
2->b
3->c
3->d
查找元素
在multimap容器中,可以使用find()成员函数来查找元素。find()函数返回指向第一个具有给定键的元素的迭代器,如果没有找到,则返回容器的end()位置。
以下是在multimap容器中查找元素的示例代码:
// multimap容器查找元素
#include <iostream>
#include <map>
int main() {
std::multimap <int, char> m;
m.insert(std::make_pair(1, 'a'));
m.insert(std::make_pair(2, 'b'));
m.insert(std::make_pair(3, 'c'));
m.insert(std::make_pair(3, 'd'));
std::multimap <int, char>::iterator itr;
itr = m.find(3);
std::cout << "Elements with key 3:\n";
std::cout << itr->first << "->" << itr->second << '\n';
return 0;
}
输出:
Elements with key 3:
3->c
删除元素
在multimap容器中,可以使用erase()成员函数来删除键值对。这个成员函数接受一个迭代器(指向要删除的元素)或一对迭代器(指定要删除的元素的范围)。
以下是从multimap容器中删除元素的示例代码:
// multimap容器删除元素
#include <iostream>
#include <map>
int main() {
std::multimap <int, char> m;
m.insert(std::make_pair(1, 'a'));
m.insert(std::make_pair(2, 'b'));
m.insert(std::make_pair(3, 'c'));
m.insert(std::make_pair(3, 'd'));
std::cout << "Multimap before erase:\n";
for (auto const& pair: m) {
std::cout << pair.first << "->" << pair.second << '\n';
}
std::multimap <int, char>::iterator itr;
itr = m.find(3);
m.erase(itr);
std::cout << "Multimap after erase:\n";
for (auto const& pair: m) {
std::cout << pair.first << "->" << pair.second << '\n';
}
return 0;
}
输出:
Multimap before erase:
1->a
2->b
3->c
3->d
Multimap after erase:
1->a
2->b
3->d
multimap::swap()函数
multimap::swap()函数是C++ STL中multimap容器的交换函数,它将两个multimap容器的内容互换,使得容器1中的内容存储在容器2中,容器2中的内容存储在容器1中。
注意,multimap::swap()函数不会复制任何元素,只是交换了两个容器的指针,因此它是一个非常快速的操作。此外,multimap::swap()函数不会影响任何迭代器、引用或指向交换后容器中的元素的指针。
以下是使用multimap::swap()函数交换multimap容器的示例代码:
// multimap容器交换
#include <iostream>
#include <map>
int main() {
std::multimap <int, char> m1;
std::multimap <int, char> m2;
m1.insert(std::make_pair(1, 'a'));
m1.insert(std::make_pair(2, 'b'));
m2.insert(std::make_pair(3, 'c'));
m2.insert(std::make_pair(4, 'd'));
std::cout << "Multimap 1 contains:\n";
for (auto const& pair: m1) {
std::cout << pair.first << "->" << pair.second << '\n';
}
std::cout << "Multimap 2 contains:\n";
for (auto const& pair: m2) {
std::cout << pair.first << "->" << pair.second << '\n';
}
m1.swap(m2);
std::cout << "After swap:\n";
std::cout << "Multimap 1 contains:\n";
for (auto const& pair: m1) {
std::cout << pair.first << "->" << pair.second << '\n';
}
std::cout << "Multimap 2 contains:\n";
for (auto const& pair: m2) {
std::cout << pair.first << "->" << pair.second << '\n';
}
return 0;
}
输出:
Multimap 1 contains:
1->a
2->b
Multimap 2 contains:
3->c
4->d
After swap:
Multimap 1 contains:
3->c
4->d
Multimap 2 contains:
1->a
2->b
结论
multimap::swap()函数是C++ STL中multimap容器的交换函数,它将两个multimap容器的内容互换,使得容器1中的内容存储在容器2中,容器2中的内容存储在容器1中。multimap::swap()函数不会复制任何元素,只是交换了两个容器的指针,因此它是一个非常快速的操作。此外,multimap::swap()函数不会影响任何迭代器、引用或指向交换后容器中的元素的指针。