std::unordered_multiset<Key,Hash,KeyEqual,Allocator>::equal_range

1,2) Returns a range containing all elements with key key in the container. The range is defined by two iterators, the first pointing to the first element of the wanted range and the second pointing past the last element of the range.

# Declarations

std::pair<iterator, iterator> equal_range( const Key& key );

(since C++11)

std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const;

(since C++11)

template< class K >
std::pair<iterator, iterator> equal_range( const K& x );

(since C++20)

template< class K >
std::pair<const_iterator, const_iterator> equal_range( const K& x ) const;

(since C++20)

# Parameters

# Return value

std::pair containing a pair of iterators defining the wanted range. If there are no such elements, past-the-end (see end()) iterators are returned as both elements of the pair.

# Notes

Feature-test macro Value Std Feature __cpp_lib_generic_unordered_lookup 201811L (C++20) Heterogeneous comparison lookup in unordered associative containers, overloads (3,4)

# Example

#include <iostream>
#include <iterator>
#include <string>
#include <unordered_set>
 
int main()
{
    std::string sentence{"cppreference.com"};
    std::cout << "The sentence: " << sentence << '\n';
 
    std::unordered_multiset<char> sequence;
    for (char x : sentence)
        sequence.insert(x);
 
    std::cout << "The sequence: { ";
    for (char x : sequence)
        std::cout << x << ' ';
 
    std::cout << "}\n" "Symbol:Frequency: ";
    for (auto it = sequence.begin(); it != sequence.end();)
    {
        if (auto [first, last] = sequence.equal_range(*it); first != last)
        {
            std::cout << *first << ":" << std::distance(first, last) << "  ";
            it = last;
        }
        else
            ++it;
    }
}

# See also