C++标准模板库(STL)中的Multimap
Multimap与map相似,不同之处在于多个元素可以具有相同的键。此外,在这种情况下,键值对和映射值对不一定是唯一的。有关multimap的一个重要事项是,multimap始终保持所有键的排序顺序。multimap的这些属性使其在竞争编程中非常有用。
与multimap相关的一些基本函数:
- begin() – 返回multimap中第一个元素的迭代器
- end() – 返回满足最后一个元素的理论要求的迭代器
- size() – 返回multimap中的元素数
- max_size() – 返回multimap可以容纳的最大元素数
- empty() – 返回multimap是否为空
- pair<int,int> insert(keyvalue, multimapvalue) – 将一个新元素添加到multimap中
C ++实现以说明上述函数:
// CPP程序演示multimap的实现
#include <iostream>
#include <iterator>
#include <map>
using namespace std;
// 驱动程序
int main()
{
multimap<int, int> gquiz1; // 空multimap容器
// 以随机顺序插入元素
gquiz1.insert(pair<int, int>(1, 40));
gquiz1.insert(pair<int, int>(2, 30));
gquiz1.insert(pair<int, int>(3, 60));
gquiz1.insert(pair<int, int>(6, 50));
gquiz1.insert(pair<int, int>(6, 10));
// 打印multimap gquiz1
multimap<int, int>::iterator itr;
cout << "\n multimap gquiz1是:\n";
cout << "\tKEY\tELEMENT\n";
for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
cout << '\t' << itr->first << '\t' << itr->second
<< '\n';
}
cout << endl;
// 随机添加元素,
// 检查排序键属性
gquiz1.insert(pair<int, int>(4, 50));
gquiz1.insert(pair<int, int>(5, 10));
// 再次打印multimap gquiz1
cout << "\n添加额外元素后的multimap gquiz1是:\n";
cout << "\tKEY\tELEMENT\n";
for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
cout << '\t' << itr->first << '\t' << itr->second
<< '\n';
}
cout << endl;
// 将gquiz1的元素赋给gquiz2
multimap<int, int> gquiz2(gquiz1.begin(), gquiz1.end());
// 打印multimap gquiz2的所有元素
cout << "\n赋值自gquiz1之后的multimap gquiz2为:\n";
cout << "\tKEY\tELEMENT\n";
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
cout << '\t' << itr->first << '\t' << itr->second
<< '\n';
}
cout << endl;
// 删除gquiz2中小于
// 键值为3的所有元素
cout << "\n gquiz2中小于Key = 3的元素已被删除: \n";
cout << "\tKEY\tELEMENT\n";
gquiz2.erase(gquiz2.begin(), gquiz2.find(3));
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
cout << '\t' << itr->first << '\t' << itr->second
<< '\n';
}
// 删除所有键值为4的元素
int num;
num = gquiz2.erase(4);
cout << "\n gquiz2.erase(4) : ";
cout << num << " 已删除 \n";
cout << "\tKEY\tELEMENT\n";
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
cout << '\t' << itr->first << '\t' << itr->second
<< '\n';
}
cout << endl;
// multimap gquiz1中键=5的下限和上限
cout << "gquiz1.lower_bound(5) : "
<< "\tKEY = ";
cout << gquiz1.lower_bound(5)->first << '\t';
cout << "\tELEMENT = " << gquiz1.lower_bound(5)->second
<< endl;
cout << "gquiz1.upper_bound(5) : "
<< "\tKEY = ";
cout << gquiz1.upper_bound(5)->first << '\t';
cout << "\tELEMENT = " << gquiz1.upper_bound(5)->second
<< endl;
return 0;
}
输出
multimap gquiz1是:
KEY ELEMENT
1 40
2 30
3 60
6 50
6 10
在添加额外元素后,multimap gquiz1变为:
KEY ELEMENT
1 40
2 30
3 60
4 50
5 10
6 50
6 10
从gquiz1分配到gquiz2后,multimap gquiz2变为:
KEY ELEMENT
1 40
2 30
3 60
4 50
5 10
6 50
6 10
删除键值小于3的元素后,gquiz2变成:
KEY ELEMENT
3 60
4 50
5 10
6 50
6 10
gquiz2.erase(4):删除1个,结果如下:
KEY ELEMENT
3 60
5 10
6 50
6 10
gquiz1.lower_bound(5): KEY = 5 ELEMENT = 10
gquiz1.upper_bound(5): KEY = 6 ELEMENT = 50