C++中的元组多重映射及示例

C++中的元组多重映射及示例

什么是多重映射?

在C++中,多重映射是一种关联式容器,用于以映射方式存储元素。内部,多重映射被实现为红黑树。多重映射的每个元素都被视为一对。第一个值称为键,第二个值称为值。多重映射与映射非常相似,但在多重映射的情况下,可以有多个相同的键。此外,不能使用方括号([])访问与键映射的值。像映射一样,多重映射的键默认按升序排序。

与多重映射相关的函数:

  • begin() 返回指向多重映射中第一个元素的迭代器。
  • end() 返回指向多重映射中最后一个元素的下一个理论元素的迭代器。
  • size() 返回多重映射中元素的数量。
  • max_size() 返回多重映射可以容纳的最大元素数。
  • empty() 返回多重映射是否为空。
  • insert(key, Value) 将新元素或对添加到多重映射中。
  • erase(iterator position) 删除由迭代器指向的位置处的元素。
  • erase(const x) 从多重映射中删除键值“x”。
  • clear() 从多重映射中删除所有元素。

什么是元组?

在C++中,元组是用于将元素分组的对象。在元组中,元素可以是相同的数据类型或不同的数据类型。元组的元素按访问顺序初始化。

与元组配合使用的函数:

  • make_tuple(): 用于为元组分配值。传递的值应按照元组中声明的值的顺序进行。
  • get(): 用于访问元组值并对其进行修改,它接受索引和元组名称作为参数以访问特定的元组元素。

如何访问元组?

使用get<>()函数来访问元组的元素。

语法:

**auto fistElement = get <0>(myTuple); **

**auto secondElement = get <1>(myTuple); **

**auto thirdElement = get <2>(myTuple); **

本文重点介绍如何在C++中创建元组的多重映射。

元组的多重映射

元组的多重映射是一种多重映射,在其中键或值之一本身就是元组。如果两个元组的对应的第一个、第二个和第三个元素相等,则认为它们相等。现在,如果需要存储多于一个元组的副本以及其他元素,而且还需要以排序或特定顺序进行维护,这时元组的多重映射就非常有用了。

语法:

**multimap <tuples<dataType1, dataType2, dataType3>> myMultimap; **

在这里,

dataType1, dataType2, dataType3 可以是相似或不同的数据类型。

示例1: 下面是一个C++程序,演示了元组的多重映射情况的工作原理。

// C++程序演示了一个
// 元组的multimap的工作原理。
#include <bits/stdc++.h>
using namespace std;
  
// 函数打印multimap元素
void print(multimap<tuple<int, int, int>, 
           bool>& myContainer)
{
    cout << "Key(由整数tuple组成)" << 
            "            " << 
            "Value(布尔值)\n\n";
  
    for (auto currentTuple : myContainer) 
    {
        //multiset的每个元素本身是一个pair,
        //其中Key是tuple类型
        tuple<int, int, int> Key = currentTuple.first;
  
        //Value是一个布尔值
        bool value = currentTuple.second;
  
        //打印key元素和value值
        cout << '[' << get<0>(Key) << " , " << 
                get<1>(Key) << " , " << get<2>(Key) << 
                ']' << "                        " << 
                value << '\n';
    }
}
  
// 驱动代码
int main()
{
    // 声明multimap
    // Key是tuple<int, int, int>类型
    // Value是bool类型
    multimap<tuple<int, int, int>, 
             bool> myContainer;
  
    // 创建用作key的一些元组
    tuple<int, int, int> tuple1;
    tuple1 = make_tuple(100, 200, 300);
  
    tuple<int, int, int> tuple2;
    tuple2 = make_tuple(200, 300, 400);
  
    tuple<int, int, int> tuple3;
    tuple3 = make_tuple(300, 400, 500);
  
    tuple<int, int, int> tuple4;
    tuple4 = make_tuple(100, 200, 300);
  
    //由于multimap中每个元素本身都是一个元组,
    //所以我们插入了一个元组
    //请注意,[]运算符在multimap的情况下无效
    myContainer.insert(pair<tuple<int, int, int>, 
                       bool>(tuple1, true));
    myContainer.insert(pair<tuple<int, int, int>, 
                       bool>(tuple2, false));
    myContainer.insert(pair<tuple<int, int, int>, 
                       bool>(tuple3, true));
    myContainer.insert(pair<tuple<int, int, int>, 
                       bool>(tuple4, false));
  
    //调用print函数
    print(myContainer);
  
    return 0;
}  

输出

Key(由整数tuple组成) Value(布尔值) 

[100, 200, 300] 1   
[100, 200, 300] 0   
[200, 300, 400] 0   
[300, 400, 500] 1 

示例2: 下面是演示tuple的multimap的工作原理的C++程序。

// C++程序演示了元组的多重映射的工作方式。
#include <bits/stdc++.h>
using namespace std;
  
//打印多重映射元素的函数
void print(multimap<tuple<string, int, float>, 
           bool>& myContainer)
{
    cout << "Key(tuple of integers)" << 
            "            " << 
            "Value(boolean)\n\n";
  
    for (auto currentTuple : myContainer) 
    {
        //每个多重集的元素本身都是一个元组
        //键是一个元组类型
        tuple<string, int, float> Key = 
                           currentTuple.first;
  
        //值是布尔值
        bool value = currentTuple.second;
  
        //打印键元素和值
        cout << '[' << get<0>(Key) << " , " << 
                get<1>(Key) << " , " << get<2>(Key) << 
                ']' << "                        " << 
                value << '\n';
    }
}
  
//驱动代码
int main()
{
    //声明一个多重映射
    //键类型为元组<字符串,整数,浮点数>
    //值类型为布尔值
    multimap<tuple<string, int, float>, 
                           bool> myContainer;
  
    //创建一些元组作为键
    tuple<string, int, float> tuple1;
    tuple1 = make_tuple("Java", 100, 1.123);
  
    tuple<string, int, float> tuple2;
    tuple2 = make_tuple("Geek", 200, 2.123);
  
    tuple<string, int, float> tuple3;
    tuple3 = make_tuple("HTML", 300, 3.123);
  
    tuple<string, int, float> tuple4;
    tuple4 = make_tuple("Java", 100, 1.123);
  
    //由于每个元素在多重映射中本身就是一个元组。所以我们插入了一个元组
    //注意,[]运算符在多重映射中不起作用
    myContainer.insert(pair<tuple<string, int, float>, 
                       bool>(tuple1, true));
    myContainer.insert(pair<tuple<string, int, float>, 
                       bool>(tuple2, false));
    myContainer.insert(pair<tuple<string, int, float>, 
                       bool>(tuple3, true));
    myContainer.insert(pair<tuple<string, int, float>, 
                       bool>(tuple4, false));
  
    //调用打印函数
    print(myContainer);
  
    return 0;
}  

输出结果

Key(tuple of integers) Value(boolean) 

[Geek, 200, 2.123] 0   
[HTML, 300, 3.123] 1   
[Java, 100, 1.123] 1   
[Java, 100, 1.123] 0 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程