C++中的双关键字映射表及示例
什么是双关键字映射表?
在C++中,双关键字映射表是一种关联式容器,用于以映射方式存储元素。在内部,它被实现为一个红黑树。双关键字映射表中的每个元素都被视为一个pair,第一个值被称为键,第二个值被称为值。双关键字映射表类似于映射,但在双关键字映射表的情况下,我们可以有多个相同的键。此外,我们不能使用方括号([])来访问与键相关联的值。与映射一样,双关键字映射表的键默认按升序排序。
与双关键字映射表相关联的功能:
- begin(): 返回迭代器以指向双关键字映射表的第一个元素
- end(): 返回迭代器以指向双关键字映射表中最后一个元素后面的理论元素
- size(): 返回双关键字映射表中元素的数量
- max_size(): 返回双关键字映射表可以容纳的最大元素数量
- empty(): 返回双关键字映射表是否为空
- insert(key, value): 将新的元素或pair添加到双关键字映射表中
- erase(iterator position): 删除迭代器指向的位置的元素
- erase(const x): 从双关键字映射表中删除键值对‘x’
- clear(): 从双关键字映射表中删除所有元素
什么是pair?
在C++的utility标头文件中,我们提供了pair容器。pair由两个数据元素或对象组成。
- 第一个元素引用为‘first’,第二个元素引用为‘second’,顺序固定(first,second)。
- Pair用于组合两个可能不同类型的值。Pair提供了一种将两个异构对象存储为单个单元的方法。
- Pair可以进行分配、复制和比较。在映射或哈希映射中分配的对象的数组默认为类型‘pair’,其中所有‘first’元素都是唯一键,与它们的‘second’ 值对象相关联。
要访问元素,我们使用变量名,后跟点运算符,后跟关键字first或second。
如何访问pair?
可以使用点(.)运算符访问pair的元素。
语法:
auto firstElement = myPair.first;
auto secondElement = myPair.second;
双关键字映射表
双关键字映射表是一种双关键字映射表,其中键或值之一本身就是pair。如果两个pair的相应的第一个和第二个元素相同,则它们被认为是相等的。现在如果需要存储多个pair的副本以及其他元素,并且还需要以排序或特定顺序存储它们,则在这种情况下,双关键字映射表非常有用。
语法:
**multimap <pair<dataType1,dataType2>> myMultimap; **
在此,dataType1和dataType2可以是相似或不同的数据类型。
示例1: 以下是演示双关键字映射表工作的C++程序。
// C++程序演示了一个由pair组成的multimap的工作原理。
#include <bits/stdc++.h>
using namespace std;
//打印multimap元素的函数
void print(multimap<pair<int, int>,
bool>& myContainer)
{
cout << "Key(pair of integers)" <<
" " <<
"Value(boolean)\n\n";
for (auto pr : myContainer)
{
pair<int, int> myPair = pr.first;
// pr指向myContainer当前的一对键值
cout << '[' << myPair.first << " , " <<
myPair.second << ']' <<
" " <<
pr.second << '\n';
}
}
// 驱动器代码
int main()
{
//声明一种多重映射
//键是pair<int,int>类型
//值是bool类型
multimap<pair<int, int>, bool> myContainer;
//创建一些键值对作为key
pair<int, int> pair1;
pair1 = make_pair(100, 200);
pair<int, int> pair2;
pair2 = make_pair(200, 300);
pair<int, int> pair3;
pair3 = make_pair(300, 400);
pair<int, int> pair4;
pair4 = make_pair(100, 200);
//每个元素都是自己的一对
//在一个multimap中。所以,我们
//插入一对
//注意[]运算符在multimap的情况下不起作用
myContainer.insert(pair<pair<int, int>,
bool>(pair1, true));
myContainer.insert(pair<pair<int, int>,
bool>(pair2, false));
myContainer.insert(pair<pair<int, int>,
bool>(pair3, true));
myContainer.insert(pair<pair<int, int>,
bool>(pair4, false));
//调用打印函数
print(myContainer);
return 0;
}
输出
Key(pair of integers) Value(boolean)
[100, 200] 1
[100, 200] 0
[200, 300] 0
[300, 400] 1
示例2: 下面是C++程序演示了一个由pair组成的multimap的工作原理。
//展示对成对multimap的工作的C++程序。
#include <bits/stdc++.h>
using namespace std;
//输出multimap元素的函数
void print(multimap<pair<string, int>,
bool>& myContainer)
{
cout << "Key(pair of integers)" <<
" " <<
"Value(boolean)\n\n";
for (auto pr : myContainer)
{
pair<string, int> myPair = pr.first;
// pr指向myContainer的当前对
cout << '[' << myPair.first <<
" , " << myPair.second <<
']' << " " <<
" " <<
pr.second << '\n';
}
}
//驱动程序
int main()
{
//声明multimap
//Key是pair<int, int>类型
//Value是bool类型
multimap<pair<string, int>, bool> myContainer;
//创建一些要用作键的对
pair<string, int> pair1;
pair1 = make_pair("GFG", 100);
pair<string, int> pair2;
pair2 = make_pair("C++", 200);
pair<string, int> pair3;
pair3 = make_pair("CSS", 300);
pair<string, int> pair4;
pair4 = make_pair("GFG", 400);
//由于每个元素本身就是一个对,所以我们要插入一个对
//注意[]运算符不适用于multimap
myContainer.insert(pair<pair<string, int>,
bool>(pair1, true));
myContainer.insert(pair<pair<string, int>,
bool>(pair2, false));
myContainer.insert(pair<pair<string, int>,
bool>(pair3, true));
myContainer.insert(pair<pair<string, int>,
bool>(pair4, false));
//调用print函数
print(myContainer);
return 0;
}
输出
Key(pair of integers) Value(boolean)
[C++, 200] 0
[CSS, 300] 1
[GFG, 100] 1
[GFG, 400] 0