Open In App

How to Find Intersection of Two Multisets in C++?

Last Updated : 21 Feb, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

In C++, multisets are a type of associative container similar to the set, with the exception that multiple elements can have the same values. Intersection means the elements that are common between two datasets. In this article, we will see how to find the intersection of two Multisets in C++.

Example

Input: 
myMultiset2 = {100,300,400,500,200,500,200}, 
myMultiset2 = {700,600,1000,500,500,500,400} 

Output:
{400, 500, 500}

Finding Intersection of Two Multisets in C++

To find the intersection of two multisets in C++, we can use the std::set_intersection() function provided by STL which finds the intersection of two sorted ranges and saves the result in the given container.

Syntax of std::set_intersection()

set_intersection (first1, last1, first2, last2, result);

where,

  • first1: Iterator to the beginning of the first range.
  • last1: Iterator to the last of the first range.
  • first2: Iterator to the beginning of the second range.
  • last1: Iterator to the last of the second range.
  • result: Iterator to the beginning of the resulant data container.

C++ Program to Find the Intersection of Two Multisets

C++

// CPP Code to find the intersection of two multisets
#include <algorithm>
#include <iostream>
#include <set>
#include <vector>
using namespace std;

int main()
{
    // Create first_multiset with integer type
    // and insert 7 elements into it
    multiset<int> first_multiset;
    first_multiset.insert(100);
    first_multiset.insert(300);
    first_multiset.insert(400);
    first_multiset.insert(500);
    first_multiset.insert(200);
    first_multiset.insert(500);
    first_multiset.insert(200);

    // Create second_multiset with integer type
    // and insert 7 elements into it
    multiset<int> second_multiset;
    second_multiset.insert(700);
    second_multiset.insert(600);
    second_multiset.insert(1000);
    second_multiset.insert(500);
    second_multiset.insert(500);
    second_multiset.insert(500);
    second_multiset.insert(400);

    // Displaying the first_multiset
    cout << "First multiset: \n";
    multiset<int>::iterator itr1;
    for (itr1 = first_multiset.begin();
         itr1 != first_multiset.end(); ++itr1) {
        cout << *itr1 << ", ";
    }
    cout << endl;
    cout << endl;

    // Displaying the second_multiset
    cout << "Second multiset: \n";
    multiset<int>::iterator itr2;
    for (itr2 = second_multiset.begin();
         itr2 != second_multiset.end(); ++itr2) {
        cout << *itr2 << ", ";
    }
    cout << endl;
    cout << endl;

    // Create vector to store the intersection of two
    // multisets with size of both the multisets
    vector<int> v(first_multiset.size()
                  + second_multiset.size());

    vector<int>::iterator it, st;

    // Intersection of two multisets
    it = set_intersection(first_multiset.begin(),
                          first_multiset.end(),
                          second_multiset.begin(),
                          second_multiset.end(), v.begin());

    // Display vector
    cout << "Intersection of the above multisets: \n";
    for (st = v.begin(); st != it; ++st)
        cout << *st << ", ";

    return 0;
}
Output

First multiset: 
100, 200, 200, 300, 400, 500, 500, 

Second multiset: 
400, 500, 500, 500, 600, 700, 1000, 

Intersection of the above multisets: 
400, 500, 500, 

Time complexity :O(N+M), where N and M is the size of first and second multiset.
Auxiliary Space: O(N+M)


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads