在C++中使用示例的元组的Multiset

在C++中使用示例的元组的Multiset

什么是元组?

在C++中,元组是将一组元素绑定在一起的对象。这些元素可以是相似的,也可以是不同的数据类型。元组的元素按访问顺序初始化。

语法:

**tuple <data_type1, data_type2, dataType3, ….> myTuple **

在这里,

dataType1,dataType2,dataType3……是类似的或不同的数据类型

与元组相关的函数:

1. make_tuple(): make_tuple()用于分配具有值的元组。传递的值应按tuple中声明的值的顺序排列。

语法:

myTuple = make_tuple(value1, value2, value3,….)

2. get(): get()用于访问元组值并修改它们,它接受索引和元组名称作为访问特定元组元素的参数。

语法:

get <index>(myTuple)

在这里,

index是我们要访问myTuple中的元素的索引。在元组中索引从零开始。

什么是multiset?

multiset是一种类似于set的关联容器类型,但在multiset的情况下,所有元素都必须成对不同。简单地说,可以有多个具有相同值的元素。

语法:

multiset <dataType> myMultiset;

在这里,

dataType是数据类型。

与multiset相关的函数:

  • begin(): 返回multiset中的第一个元素的迭代器。
  • end(): 返回multiset中最后一个元素之后的理论元素的迭代器。
  • size(): 返回multiset中的元素数量。
  • max_size(): 返回multiset可以容纳的最大元素数。
  • empty(): 返回multiset是否为空。

元组的multiset在算法需要复杂数据结构时非常有用。本文介绍了如何在C++中创建元组的multiset。请注意,为简单起见,考虑了三个元素的元组,但元组也可以包含更多或更少的元素。

元组的multiset

元组的multiset是其中每个元素都是元组的multiset。

语法:

**multiset <tuple<dataType1, dataType2, dataType3>> multisetOfTuples; **

在这里,

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

示例1: 下面是实现元组的multiset的C++程序:

// C++程序演示了
//元组的多重实现
#include
using namespace std;
  
//打印多重集合的内容
void print(multiset<tuple<int, int,
           int> >& multisetOfTuples)
 
{
  //遍历multisetOfTuples元素
  for(auto x : multisetOfTuples)
  {
    //每个元素本身也是元组
    tuple<int, int, int>tp = x;
 
    //打印元组的元素
    cout<<get<0>(tp)<<
            ' '<<get<1>(tp)<<
            ' '<<get<2>(tp)<<'\n';
  }
}
 
//主函数
int main()
{
  //声明一个元组的多重集合
  multiset<tuple<int, int,
  int> > multisetOfTuples;
 
  //初始化元组
  tuple<int, int,
  int> tuple1;
  tuple1 = make_tuple(4, 2, 3);
 
  tuple<int, int,
  int> tuple2;
  tuple2 = make_tuple(2, 3, 5);
 
  tuple<int, int,
  int> tuple3;
  tuple3 = make_tuple(2, 3, 5);
 
  tuple<int, int,
  int> tuple4;
  tuple4 = make_tuple(2, 1, 4);
 
  tuple<int, int,
  int> tuple5;
  tuple5 = make_tuple(4, 2, 3);
 
 
  //插入到集合中
  multisetOfTuples.insert(tuple1);
  multisetOfTuples.insert(tuple2);
  multisetOfTuples.insert(tuple3);
  multisetOfTuples.insert(tuple4);
  multisetOfTuples.insert(tuple5);
 
  //调用print函数
  print(multisetOfTuples);
 
  return 0;
}  

输出:

2 1 4   
2 3 5   
2 3 5   
4 2 3   
4 2 3 

说明:

在上述输出中,多重集合中总共有五个元组,其中 (2, 3, 5) 和 (4, 2, 3) 重复出现两次。默认情况下,元组按非降序排列在多重集合中,并遵循以下逻辑:

  1. 在多重集合中,如果两个元组的第一个值相等,则比较元组的第二个值,如果它也相等,则比较第三个值。
  2. 但是,始终可以将比较器传递给集合。

示例2: 下面是一个C++程序,演示将比较器传递给多重集合,以按非升序排列多重集合元素。

// C++程序演示
//使用自定义比较器实现
//元组的多重集合
#include <bits/stdc++.h>
using namespace std;
  
//多重集合元素的比较器
//按非升序排列我们可以
//按需求修改比较器
struct cmp
{
  //将多重集合元素排列为非升序
  bool operator()(const tuple<int, int,
                              int>& x,
                  const tuple<int, int,
                              int>& y)
  {
    //如果相应元组的第一个元素相等
    if (get<0>(x) == get<0>(y))
    {
      //如果相应元组的第二个元素相等
      if (get<1>(x) == get<1>(y))
        return get<2>(x) > get<2>(y);
       
      return get<1>(x) > get<1>(y);
    }
 
    return get<0>(x) > get<0>(y);
  }
};
 
//打印多重集合元素的函数
void print(multiset<tuple<int, int,
           int>, cmp>& multisetOfTuples)
{
  for (auto x : multisetOfTuples)
  {
    //多重集合中的每个元素都是元组本身
    tuple<int, int, int> tp = x;
 
    //打印元组元素
    cout << get<0>(tp) <<
            ' ' << get<1>(tp) <<
            ' ' << get<2>(tp) << '\n';
  }
}
 
//主函数
int main()
{
  //声明一个多重集合元组
  multiset<tuple<int, int,
                 int>, cmp> multisetOfTuples;
 
  //初始化元组
  tuple<int, int,
        int> tuple1;
  tuple1 = make_tuple(1, 2, 3);
 
  tuple<int, int,
        int> tuple2;
  tuple2 = make_tuple(2, 3, 5);
 
  tuple<int, int,
        int> tuple3;
  tuple3 = make_tuple(2, 3, 5);
 
  tuple<int, int,
        int> tuple4;
  tuple4 = make_tuple(2, 1, 4);
 
  tuple<int, int,
        int> tuple5;
  tuple5 = make_tuple(5, 8, 4);
 
  //将元组插入多重集合
  multisetOfTuples.insert(tuple1);
  multisetOfTuples.insert(tuple2);
  multisetOfTuples.insert(tuple3);
  multisetOfTuples.insert(tuple4);
  multisetOfTuples.insert(tuple5);
 
  //调用打印函数
  print(multisetOfTuples);
 
  return 0;
}  

输出:

5 8 4   
2 3 5   
2 3 5   
2 1 4   
1 2 3 

时间复杂度: O(n log n)。 // n是插入到多重集合中的元组数。

辅助空间: O(n)。

说明:

在上面的输出中,多重集合中的元素按照非升序排列。具有值为(2, 3, 5)的元组在多重集合中有两个副本。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程