C++ unordered_multiset - unordered_multiset() Function
The C++ unordered_multiset::unordered_multiset function is used to construct a unordered_multiset object, initializing its contents depending on the version of constructor used:
Syntax
//default version - construct an empty //container with no elements explicit unordered_multiset ( size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); explicit unordered_multiset ( const allocator_type& alloc ); //range version - Constructs a container with //elements as the range [first,last) template <class InputIterator> unordered_multiset ( InputIterator first, InputIterator last, size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); //copy version - copies all elements //of ust into the container unordered_multiset ( const unordered_multiset& ums ); unordered_multiset ( const unordered_multiset& ums, const allocator_type& alloc ); //move version - moves elements of ust //into the container unordered_multiset ( unordered_multiset&& ums ); unordered_multiset ( unordered_multiset&& ums, const allocator_type& alloc ); //initializer list version - copies all //elements of il into the container unordered_multiset (initializer_list<value_type> il, size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );
//default version - construct an empty //container with no elements unordered_multiset(); explicit unordered_multiset ( size_type n, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); explicit unordered_multiset ( const allocator_type& alloc ); unordered_multiset ( size_type n, const allocator_type& alloc ); unordered_multiset ( size_type n, const hasher& hf, const allocator_type& alloc ); //range version - Constructs a container with //elements as the range [first,last) template <class InputIterator> unordered_multiset ( InputIterator first, InputIterator last, size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); template <class InputIterator> unordered_multiset ( InputIterator first, InputIterator last, size_type n, const allocator_type& alloc ); template <class InputIterator> unordered_multiset ( InputIterator first, InputIterator last, size_type n, const hasher& hf, const allocator_type& alloc ); //copy version - copies all elements //of ust into the container unordered_multiset ( const unordered_multiset& ums ); unordered_multiset ( const unordered_multiset& ums, const allocator_type& alloc ); //move version - moves elements of ust //into the container unordered_multiset ( unordered_multiset&& ums ); unordered_multiset ( unordered_multiset&& ums, const allocator_type& alloc ); //initializer list version - copies all //elements of il into the container unordered_multiset (initializer_list<value_type> il, size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); unordered_multiset ( initializer_list<value_type> il, size_type n, const allocator_type& alloc ); unordered_multiset ( initializer_list<value_type> il, size_type n, const hasher& hf, const allocator_type& alloc );
Parameters
alloc |
Specify the Allocator object. The container keeps and uses an internal copy of this allocator. |
n |
It contains information about minimum number of initial buckets. |
hf |
It is a hasher function object. |
eql |
The comparison function object, that returns true if the two container object keys passed as arguments are equal. |
first |
Specify initial position of the input iterator of the range. The range used is [first,last). |
last |
Specify final position of the input iterator of the range. The range used is [first,last). |
ums |
Specify an unordered_multiset object of same type. |
il |
Specify an initializer_list object. |
Return Value
Constructor never returns value.
Time Complexity
Constant i.e, Θ(1), for default version and move version.
For all the other cases, Average case: Linear i.e, Θ(n), Worst case: Quadratic i.e, Θ(n2).
Example: using default version
In the example below, the unordered_multiset::unordered_multiset function is used to construct an unordered_multiset object.
#include <iostream> #include <unordered_set> using namespace std; int main (){ //default version - construct an empty unordered_multiset unordered_multiset<int> uMSet; unordered_multiset<int>::iterator it; cout<<"uMSet contains: "; for(it = uMSet.begin(); it != uMSet.end(); ++it) cout<<*it<<" "; //insert elements in uMSet uMSet.insert(10); uMSet.insert(20); cout<<"\nuMSet contains: "; for(it = uMSet.begin(); it != uMSet.end(); ++it) cout<<*it<<" "; return 0; }
The output of the above code will be:
uMSet contains: uMSet contains: 20 10
Example: using range and copy version
An unordered_multiset can also be constructed using range or copy version. Consider the following example:
#include <iostream> #include <unordered_set> using namespace std; int main (){ unordered_multiset<int> uMSet1{100, 200, 300}; unordered_multiset<int>::iterator it; //range version - construct uMSet2 using range unordered_multiset<int> uMSet2(uMSet1.begin(), uMSet1.end()); //copy version - construct uMSet3 from uMSet1 unordered_multiset<int> uMSet3(uMSet1); cout<<"uMSet2 contains: "; for(it = uMSet2.begin(); it != uMSet2.end(); ++it) cout<<*it<<" "; cout<<"\nuMSet3 contains: "; for(it = uMSet3.begin(); it != uMSet3.end(); ++it) cout<<*it<<" "; return 0; }
The output of the above code will be:
uMSet2 contains: 100 200 300 uMSet3 contains: 300 200 100
Example: using move version
Using the move version of unordered_multiset, the content of one unordered_multiset can be moved to another unordered_multiset. Consider the following example:
#include <iostream> #include <unordered_set> using namespace std; int main (){ unordered_multiset<int> uMSet1{10, 20, 30, 40, 50}; unordered_multiset<int>::iterator it; cout<<"uMSet1 contains: "; for(it = uMSet1.begin(); it != uMSet1.end(); ++it) cout<<*it<<" "; //moving all content of uMSet1 into uMSet2 unordered_multiset<int> uMSet2(move(uMSet1)); cout<<"\nuMSet1 contains: "; for(it = uMSet1.begin(); it != uMSet1.end(); ++it) cout<<*it<<" "; cout<<"\nuMSet2 contains: "; for(it = uMSet2.begin(); it != uMSet2.end(); ++it) cout<<*it<<" "; return 0; }
The output of the above code will be:
uMSet1 contains: 50 40 30 20 10 uMSet1 contains: uMSet2 contains: 50 40 30 20 10
Example: using initializer list version
The initializer list can also be used to assign values into an unordered_multiset container. Consider the example below:
#include <iostream> #include <unordered_set> using namespace std; int main (){ //creating initializer list initializer_list<int> ilist = {15, 30, 45, 60, 75}; //initializer list version - copies all //elements of ilist into the container unordered_multiset<int> uMSet(ilist); unordered_multiset<int>::iterator it; cout<<"uMSet contains: "; for(it = uMSet.begin(); it != uMSet.end(); ++it) cout<<*it<<" "; return 0; }
The output of the above code will be:
uMSet contains: 75 60 45 30 15
❮ C++ <unordered_set> Library