Open In App

Multiset of Pairs in C++ with Examples

Last Updated : 20 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

What is Multiset?

A multiset is an associative container that can hold a number of elements in a specific order. Unlike a set, a multiset can contain multiple occurrences of the same element.

Some of the functions associated with a multiset:  

  • begin(): Returns an iterator to the first element in the multiset. 
  • end(): Returns an iterator to the theoretical element that follows the last element in the multiset.
  • size(): Returns the number of elements in the multiset.
  • max_size(): Returns the maximum number of elements that the multiset can hold.
  • empty(): Returns whether the multiset is empty.

What is Pair?

Utility header in C++ provides us pair container. A pair consists of two data elements or objects.

  • The first element is referenced as ‘first’ and the second element as ‘second’ and the order is fixed (first, second).
  • Pair is used to combine together two values that may be different in type. Pair provides a way to store two heterogeneous objects as a single unit.
  • Pair can be assigned, copied, and compared. The array of objects allocated in a map or hash_map is of type ‘pair’ by default in which all the ‘first’ elements are unique keys associated with their ‘second’ value objects.
  • To access the elements, we use variable name followed by dot operator followed by the keyword first or second.

How to access a pair?

To access elements of a pair use the dot (.) operator.

Syntax:

auto fistElement = myPair.first;
auto fistElement = myPair.second;

Multiset of pairs

A multiset of pairs is a multiset in which each element is a pair itself. Two pairs are considered to be equal if the corresponding first and second elements of pairs are equal. Now if there is a need to store more than one copy of a pair along with other elements that too in a particular order, in such cases multiset of pairs comes in handy. 

Syntax:

multiset<pair<dataType1, dataType2>> myMultiset;

 Here,

dataType1 and dataType2 can be similar or dissimilar data types.

Example 1: Below is the C++ program to demonstrate the working of a multiset of pairs having integer values.

C++




// C++ program to illustrate the
// implementation of multiset of
// pairs
#include <bits/stdc++.h>
using namespace std;
 
// Function to print multiset
// elements
void print(multiset<pair<int,
           int>> &multisetOfPairs)
  // Iterating over multiset of
  // pairs elements
  for (auto cuurentPair : multisetOfPairs)
  {
    // Each element is a tuple itself
    pair<int, int> pr = cuurentPair;
 
    // Printing pair elements
    cout << "[ " << pr.first << ' ' <<
             pr.second << " ]"<< '\n';
  }
}
 
// Driver code
int main()
{
  // Declaring a multiset of tuples
  multiset<pair<int,
  int>> multisetOfPairs;
 
  // Initializing a pair
  pair<int, int> pair1;
  pair1 = make_pair(1, 2);
 
  // Initializing a pair
  pair<int, int> pair2;
  pair2 = make_pair(3, 4);
 
  // Initializing another pair
  pair<int, int> pair3;
  pair3 = make_pair(5, 6);
 
  // Initializing another pair
  pair<int, int> pair4;
  pair4 = make_pair(7, 8);
 
  // Initializing another pair
  pair<int, int> pair5;
  pair5 = make_pair(9, 10);
 
  // Inserting into multiset
  multisetOfPairs.insert(pair1);
  multisetOfPairs.insert(pair2);
  multisetOfPairs.insert(pair3);
  multisetOfPairs.insert(pair4);
  multisetOfPairs.insert(pair5);
 
  // Calling print function
  print(multisetOfPairs);
 
  return 0;
}


Output:

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

Time complexity: O(n* log n). //n is the size of the multiset.

Space complexity: O(n).

Explanation:

In the above output, the elements are arranged in sorted order of pairs in the multiset of pairs.

Example 2: Below is the C++ program to demonstrate the working of a multiset of pairs having string values.

C++




// C++ program to illustrate the
// implementation of multiset of
// pairs
#include <bits/stdc++.h>
using namespace std;
 
// Function to print multiset elements
void print(multiset<pair<string,
           string>> &multisetOfPairs)
{
  // Iterating over multiset of pairs elements
  for (auto currentPair : multisetOfPairs)
  {
    // Each element is a pair itself
    pair<string, string> pr = currentPair;
 
    // Printing pair elements
    cout << "[ " << pr.first << ' ' <<
             pr.second << " ]"<< '\n';
  }
}
 
// Driver code
int main()
{
  // Declaring a multiset of pairs
  multiset<pair<string,
  string>> multisetOfPairs;
 
  // Initializing a pair
  pair<string, string> pair1;
  pair1 = make_pair("GeeksforGeeks",
                    "GFG");
 
  // Initializing a pair
  pair<string, string> pair2;
  pair2 = make_pair("Swift",
                    "Python");
 
  // Initializing another pair
  pair<string, string> pair3;
  pair3 = make_pair("C++", "C");
 
  // Initializing another pair
  pair<string, string> pair4;
  pair4 = make_pair("PHP",
                    "HTML");
 
  // Initializing another pair
  pair<string, string> pair5;
  pair5 = make_pair("Javascript",
                    "CSS");
 
  // Inserting into multiset
  multisetOfPairs.insert(pair1);
  multisetOfPairs.insert(pair2);
  multisetOfPairs.insert(pair3);
  multisetOfPairs.insert(pair4);
  multisetOfPairs.insert(pair5);
 
  // Calling print function
  print(multisetOfPairs);
 
  return 0;
}


Output:

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

Time complexity: O(n* log n). //n is the size of the multiset.

Space complexity: O(n).

Explanation:

In the above output, the elements are arranged in sorted order of pairs in the multiset of pairs.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads