C++ unordered_set - equal_range() Function
The C++ unordered_set::equal_range function returns the bounds of a range which includes all elements in the unordered_set container that are equivalent to specified value. It returns a pair, with pair::first member as the lower bound of the range, and pair::second member as the upper bound of the range.
As a unordered_set contains unique elements, therefore the range will contain a single element at most. If no match is found, it will return the range with end as both its lower and upper range bounds.
Syntax
pair<const_iterator,const_iterator> equal_range (const key_type& k) const; pair<iterator,iterator> equal_range (const key_type& k);
Parameters
val |
Specify value to compare. |
Return Value
Returns a pair, with pair::first member as the lower bound of the range, and pair::second member as the upper bound of the range.
Time Complexity
Average case: Constant i.e, Θ(1).
Worst case: Linear in container sizei.e, Θ(n).
Example:
In the example below, the unordered_set::equal_range function returns the bounds of a range for specified value in uSet.
#include <iostream> #include <unordered_set> using namespace std; int main (){ unordered_set<int> uSet{60, 10, 20, 80, 90}; unordered_set<int>::iterator it; cout<<"uSet contains:"; for(it = uSet.begin(); it != uSet.end(); ++it) cout<<" "<<*it; //finding bound range of 20 pair<unordered_set<int>::iterator, unordered_set<int>::iterator> pit; pit = uSet.equal_range(20); cout<<"\nThe lower bound point is: "<<*pit.first<<"\n"; cout<<"The upper bound point is: "<<*pit.second<<"\n"; return 0; }
The output of the above code will be:
uSet contains: 90 80 20 10 60 The lower bound point is: 20 The upper bound point is: 10
Example:
Lets consider another example where equal_range() function is used to specify bound range to delete elements from the unordered_set.
#include <iostream> #include <unordered_set> using namespace std; int main (){ unordered_set<int> uSet{60, 10, 20, 80, 90}; unordered_set<int>::iterator it; cout<<"uSet contains:"; for(it = uSet.begin(); it != uSet.end(); ++it) cout<<" "<<*it; //finding bound range of 20 pair<unordered_set<int>::iterator, unordered_set<int>::iterator> pit; pit = uSet.equal_range(20); //erasing the elements from the set uSet.erase(pit.first, pit.second); cout<<"\nuSet contains:"; for(it = uSet.begin(); it != uSet.end(); ++it) cout<<" "<<*it; return 0; }
The output of the above code will be:
uSet contains: 90 80 20 10 60 uSet contains: 90 80 10 60
❮ C++ <unordered_set> Library