C++中的Multiset of Pairs及示例

C++中的Multiset of Pairs及示例

什么是Multiset?

Multiset是一种关联式容器,它可以按特定顺序容纳多个元素。与Set不同,Multiset可以包含多个相同元素的出现。

一些与Multiset相关的函数:

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

什么是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的Multiset

Pair的Multiset是一个Multiset,其中每个元素本身就是一个Pair。如果相应的第一个和第二个元素相等,则认为两个Pair相等。如果需要存储一个Pair的多个副本,以及其他元素,而且还需要按特定顺序,此时Pair的Multiset就非常有用。

语法:

**multiset <pair<dataType1,dataType2>> myMultiset; **

在这里,

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

示例1: 下面是一个C++程序的示例,演示了具有整数值的Pair的Multiset的工作方式。

// C++程序演示了
// 实现嵌套对的multiset
#include <bits/stdc++.h>
using namespace std;
 
// Function to print multiset
// elements
void print(multiset<pair<int,
           int>> &multisetOfPairs)
{ 
  // 遍历multiset嵌套对元素
  for (auto cuurentPair : multisetOfPairs)
  {
    // 每个元素本身就是一个元组
    pair<int, int> pr = cuurentPair;
 
    // 打印对元素
    cout << "[ " << pr.first << ' ' <<
             pr.second << " ]"<< '\n';
  }
}
 
// 驱动程序
int main()
{
  // 声明一个多元组的multiset
  multiset<pair<int,
  int>> multisetOfPairs;
 
  // 初始化一个对
  pair<int, int> pair1;
  pair1 = make_pair(1, 2);
 
  // 初始化一个对
  pair<int, int> pair2;
  pair2 = make_pair(3, 4);
 
  // 初始化另一个对
  pair<int, int> pair3;
  pair3 = make_pair(5, 6);
 
  // 初始化另一个对
  pair<int, int> pair4;
  pair4 = make_pair(7, 8);
 
  // 初始化另一个对
  pair<int, int> pair5;
  pair5 = make_pair(9, 10);
 
  // 插入到multiset中
  multisetOfPairs.insert(pair1);
  multisetOfPairs.insert(pair2);
  multisetOfPairs.insert(pair3);
  multisetOfPairs.insert(pair4);
  multisetOfPairs.insert(pair5);
 
  // 调用print函数
  print(multisetOfPairs);
 
  return 0;
}  

输出:

[ 1 2 ]   
[ 3 4 ]   
[ 5 6 ]   
[ 7 8 ]   
[ 9 10 ] 

时间复杂度: O(n* log n). //n是multiset中元素的个数。

空间复杂度: O(n).

解释:

在上面的输出中,元素按照multiset的对的排序顺序排列。

例2: 下面是演示具有字符串值的数字对链表的multiset的C++程序。

// C++程序演示了
// 实现嵌套对的multiset
#include <bits/stdc++.h>
using namespace std;
 
// Function to print multiset elements
void print(multiset<pair<string,
           string>> &multisetOfPairs)
{
  // 遍历multiset嵌套对元素
  for (auto currentPair : multisetOfPairs)
  {
    // 每个元素本身就是一个对
    pair<string, string> pr = currentPair;
 
    // 打印对元素
    cout << "[ " << pr.first << ' ' <<
             pr.second << " ]"<< '\n';
  }
}
 
//驱动程序
int main()
{
  // 声明一个多元组的multiset
  multiset<pair<string,
  string>> multisetOfPairs;
 
  // 初始化一个对
  pair<string, string> pair1;
  pair1 = make_pair("GeeksforGeeks",
                    "GFG");
 
  // 初始化一个对
  pair<string, string> pair2;
  pair2 = make_pair("Swift",
                    "Python");
 
  // 初始化另一个对
  pair<string, string> pair3;
  pair3 = make_pair("C++", "C");
 
  // 初始化另一个对
  pair<string, string> pair4;
  pair4 = make_pair("PHP",
                    "HTML");
 
  // 初始化另一个对
  pair<string, string> pair5;
  pair5 = make_pair("Javascript",
                    "CSS");
 
  // 插入到multiset中
  multisetOfPairs.insert(pair1);
  multisetOfPairs.insert(pair2);
  multisetOfPairs.insert(pair3);
  multisetOfPairs.insert(pair4);
  multisetOfPairs.insert(pair5);
 
  // 调用print函数
  print(multisetOfPairs);
 
  return 0;
}  

输出:

[ C++ C ]   
[ GeeksforGeeks GFG ]   
[ Javascript CSS ]   
[ PHP HTML ]   
[ Swift Python ] 

时间复杂度: O(n* log n)。//这里的n是一个multiset中的大小。

空间复杂度: O(n)。

解释:

以上输出中,元素按照multiset中对的排列顺序进行排序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程