Open In App

Multiset in C++ STL

Last Updated : 21 Aug, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Multiset is an associative container similar to the set, but it can store multiple elements with same value. It is sorted in increasing order by default, but it can be changed to any desired order.

Syntax

Multiset is defined as std::multiset class template inside <set> header file.

multiset<T, comp> ms;

where,

  • T: Datatype of elements in the multiset.
  • ms: Name assigned to the multiset.
  • comp: It is a binary predicate function that tells multiset how to compare two elements in sorting. It is optional and if not provided, multiset is sorted in increasing order.

Declaration and Initialization

We can declare and initialize a multiset in multiple ways as shown in the below example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    
    // Creating an empty set of integers
    multiset<int> ms1;
    
    // Initialize with initializer list
    multiset<int> ms2 = {5, 3, 3, 1};

    for (auto i : ms2)
        cout << i << " ";
    return 0;
}

Output
1 3 3 5 

Basic Operations

Here are the basic operations that can be performed on a multiset:

Inserting Elements

We can insert elements into a multiset by using insert() method. The multiset will automatically keep the elements sorted.

Example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    multiset<int> ms;

    // Inserting elements
    ms.insert(5);
    ms.insert(3);
    ms.insert(3);
    ms.insert(1);
    
    for(auto i : ms)
        cout << i << " ";
    return 0;
}

Output
1 3 3 5 

Accessing Elements

We can't use an index to get elements like in an array.
To reach a certain element, we start from begin() and move the iterator forward step by step or use helper functions like next() or advance().

But we can easily get the first element with begin() and the last element by moving one step back from end().

Example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    multiset<int> ms = {5, 3, 3, 1};

    // Access first element
    auto it1 = ms.begin();
    cout << *it1 << " ";
    
    // Access third element
    auto it2 = next(it1, 2);
    cout << *it2;
    return 0;
}

Output
1 3

Updating Elements

We cannot change the value of elements once they are stored in the set.

Finding Elements

Multiset provides fast search by value operation using the find() member function. This function returns iterator the element if found, otherwise returns end() iterator.

Example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    multiset<int> ms = {5, 3, 3, 1};

    // Finding 3
    auto it = ms.find(3);
    
    if (it != ms.end()) cout << *it;
    else cout << "Not Found!";

    return 0;
}

Output
3

Traversing

Multisets can be easily traversed using range-based for loop or using begin() and end() iterators. To traverse all the elements with same value(key), use the equal_range() function- it gives the start and end positions for the specific value.

Example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    multiset<int> ms = {5, 3, 3, 1};
    
    // Traversing using range-based loop
    for(auto i : ms)
        cout << i << " ";
    return 0;
}

Output
1 3 3 5 

Deleting Elements

To delete elements from a multiset, use the erase() method. This method can be used either by passing the value or an iterator. But if the value is passed, it deletes all the occurrences of that value.

Example:

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    multiset<int> ms = {5, 3, 3, 1};
    
    // Delete first element
    ms.erase(ms.begin());
    
    // Deleting all 3s
    ms.erase(3);
    
    for (auto x: ms) cout << x << " ";
    return 0;
}

Output
5 

Multiset vs Set

Following is the primary differences between set and unordered_set in C++:

Feature

Set

Multiset

Duplicates

Not allowed (only unique elements)

Allowed (multiple copies allowed)

Order

Elements are sorted

Elements are sorted

Use case

When only unique values are needed

When duplicates are needed

Insertion

Inserts only if element not present.

Inserts elements regardless of duplicates


Multiset in C++ STL
Visit Course explore course icon

Explore