Multiset in C++ Standard Template Library (STL)

16 Jun, 2022
Multisets are a type of associative containers similar to the set, with the exception that multiple elements can have the same values. Some Basic Functions associated with multiset: 
begin() – Returns an iterator to the first element in the multiset –>  O(1)
end() – Returns an iterator to the theoretical element that follows the last element in the multiset –> O(1)
size() – Returns the number of elements in the multiset –> O(1)
max_size() – Returns the maximum number of elements that the multiset can hold –> O(1)
empty() – Returns whether the multiset is empty –> O(1)
insert (x) – Inserts the element x in the multiset –> O(log n)
clear () – Removes all the elements from the multiset –> O(n)
 erase(x) – Removes all the occurrences of x –> O(log n)
Implementation: 
CPP
// CPP Program to demonstrate the// implementation of multiset#include <iostream>#include <iterator>#include <set> using namespace std; int main(){    // empty multiset container    multiset<int, greater<int> > gquiz1;     // insert elements in random order    gquiz1.insert(40);    gquiz1.insert(30);    gquiz1.insert(60);    gquiz1.insert(20);    gquiz1.insert(50);     // 50 will be added again to    // the multiset unlike set    gquiz1.insert(50);    gquiz1.insert(10);     // printing multiset gquiz1    multiset<int, greater<int> >::iterator itr;    cout << "\nThe multiset gquiz1 is : \n";    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {        cout << *itr << " ";    }    cout << endl;     // assigning the elements from gquiz1 to gquiz2    multiset<int> gquiz2(gquiz1.begin(), gquiz1.end());     // print all elements of the multiset gquiz2    cout << "\nThe multiset gquiz2 \n"            "after assign from gquiz1 is : \n";    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {        cout << *itr << " ";    }    cout << endl;     // remove all elements up to element    // with value 30 in gquiz2    cout << "\ngquiz2 after removal \n"            "of elements less than 30 : \n";    gquiz2.erase(gquiz2.begin(), gquiz2.find(30));    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {        cout << *itr << " ";    }     // remove all elements with value 50 in gquiz2    int num;    num = gquiz2.erase(50);    cout << "\ngquiz2.erase(50) : \n";    cout << num << " removed \n";    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {        cout << *itr << " ";    }     cout << endl;     // lower bound and upper bound for multiset gquiz1    cout << "\ngquiz1.lower_bound(40) : \n"         << *gquiz1.lower_bound(40) << endl;    cout << "gquiz1.upper_bound(40) : \n"         << *gquiz1.upper_bound(40) << endl;     // lower bound and upper bound for multiset gquiz2    cout << "gquiz2.lower_bound(40) : \n"         << *gquiz2.lower_bound(40) << endl;    cout << "gquiz2.upper_bound(40) : \n"         << *gquiz2.upper_bound(40) << endl;     return 0;}
The multiset gquiz1 is : 
60 50 50 40 30 20 10 

The multiset gquiz2 
after assign from gquiz1 is : 
10 20 30 40 50 50 60 

gquiz2 after removal 
of elements less than 30 : 
30 40 50 50 60 
gquiz2.erase(50) : 
2 removed 
30 40 60 

gquiz1.lower_bound(40) : 
40
gquiz1.upper_bound(40) : 
30
gquiz2.lower_bound(40) : 
40
gquiz2.upper_bound(40) : 
60
 Removing Element From Multiset Which Have Same Value:
a.erase() – Remove all instances of element from multiset having the same value
a.erase(a.find()) – Remove only one instance of element from multiset having same value
The time complexities for doing various operations on Multisets are –
Insertion of Elements- O(log N)
Accessing Elements – O(log N)
Deleting Elements- O(log N)
C++
// CPP Code to remove an element from multiset which have// same value#include <bits/stdc++.h>using namespace std; int main(){    multiset<int> a;    a.insert(10);    a.insert(10);    a.insert(10);     // it will give output 3    cout << a.count(10) << endl;     // removing single instance from multiset     // it will remove only one value of    // 10 from multiset    a.erase(a.find(10));     // it will give output 2    cout << a.count(10) << endl;     // removing all instance of element from multiset    // it will remove all instance of value 10    a.erase(10);     // it will give output 0 because all    // instance of value is removed from    // multiset    cout << a.count(10) << endl;     return 0;}
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
3
2
0
Function
Definition
Recent Articles on Multiset  
C++ Programming Language Tutorial | Multiset in C++ STL | GeeksforGeeks - YouTubeGeeksforGeeks530K subscribersC++ Programming Language Tutorial | Multiset in C++ STL | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 2:35•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=xelzlR_OGnI" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
samridhzor23
striver02
gabaa406
anshikajain26
utkarshgupta110092
divyanshmishra101010
sweetyty
cpp-containers-library
cpp-multiset
STL
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Vector in C++ STL
Initialize a vector in C++ (7 different ways)
std::sort() in C++ STL
Bitwise Operators in C/C++
unordered_map in C++ STL
Writing First C++ Program - Hello World Example
Templates in C++ with Examples
Virtual Function in C++
vector erase() and clear() in C++
Socket Programming in C/C++