C++中的双关键字映射表及示例

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 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程