**INTRODUCTION**

UNORDERED MULTISET in Cpp

In this tutorial, we are going to learn about unordered multisets in the standard template library of C++ programming language. The unordered multiset is an associative container which is used to store multiple elements with the same values. In the unordered_set, storing multiple elements with the same value is not possible, the unordered_multiset is introduced to overcome this drawback. The unordered_multiset is also the same as the normal multiset but storing of elements doesn’t follow any specific order in unordered_multiset due to hashing of the elements, but the duplicate elements stored in the unordered_multiset stored contiguously.

Let’s look at some of the properties of the unordered_multiset.

*The unordered_multiset implements hash tables to perform different operations.*

*The elements of the unordered_multiset are organized into buckets by hashing.*

*As the unordered_multiset implements hashing, accessing elements in the unordered_multiset takes less time.*

* The basic operations implemented on the unordered_multiset take an average time of O( 1 ) and the worst case of time complexity may reach up to O( n ) in some cases.

Let’s look at the syntax of the unordered_multiset.

`Unordered_multiset< data type > variable_name;`

Where data type represents the data type of the elements that are stored in the unordered_multiset.

Let’s look at some of the basic methods that are implemented on the unordered_multiset.

**begin(): **this method returns the first element in the unordered_multiset.

**end(): **this method returns the last element in the unordered_multiset.

**size(): **returns the size of the multiset, which means the number of elements in the unordered_multiset.

**max_size(): **this max_size function returns the maximum capacity of elements that a unordered_multiset can hold.

**empty(): **this method returns a boolean value whether the unordered_multiset is empty or not.

**Insert(const g): **this method is used to add a new element ‘g’ to the unordered_multiset.

**erase(const g): ** this method is used to remove the element ‘g’ from the unordered_multiset.

These are some of the basic methods that are implemented on the unordered_multiset.

Let’s look at a sample program implementing basic methods on unordered_multiset.

```
#include<bits/stdc++.h>
using namespace std;
int main() {
unordered_multiset<int> s;
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(60);
s.insert(80);
s.insert(70);
s.insert(50);
s.insert(80);
s.insert(80);
unordered_multiset<int>::iterator it, it1;
cout << "Elements in Unordered_multiset are:\n";
for (it = s.begin(); it != s.end(); it++)
cout << *it << ' ';
it1 = s.find(80);
s.erase(it1);
cout << "\nUnordered-Multiset Elements after\nremoving one duplicate:\n";
for (it = s.begin(); it != s.end(); it++)
cout << *it << ' ';
cout<<"\nSize of the unordered_multiset : "<<endl<<s.size();
return 0;
}
```

The output of the program is.

In the above program, we have created an unordered_multiset and inserted elements into the unordered_multiset by using the *insert() *method. Then we created an iterator to traverse over the unordered_multiset. We found a number of elements in the unordered_multiset by using the *size() *function.

let’s look at the differences between the unordered_multiset and the normal multiset.

MULTISET | UNORDERED_MULTISET |

The multiset stores non-unique values in some specific sorted order. | The unordered_multiset doesn’t follow any specific order in storing elements. |

The multiset doesn’t create any buckets | The unordered_multiset creates buckets to access the elements. |

The multiset implemented by the binary search tree | The unordered_multiset is implemented by the hash tables. |

Syntax: multiset < datatype > multiset_name; | Syntax:Unordered_multiset< data type > unordered_multiset_name; |

**CONCLUSION**

That’s it from this tutorial. We have learned about the unordered_multiset, its properties, basic methods implemented on the unordered_multiset, sample program and differences between a normal multiset and the unordered_multiset.

**Happy Coding!**