C++ multimap::equal_range() Function



The C++ std::multimap::equal_range() function is used to returns a pair of iterators representing the range of elements with a specific key. It allows the retrieval of all entries matching a given key. The first iterator points to the first element with the key, and the second iterator points just past the last element with the key. The time complexity of this function is logarithmic i.e.O(log n).

Syntax

Following is the syntax for std::multimap::equal_range() function.

pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
pair<iterator,iterator>equal_range (const key_type& k);

Parameters

  • k − It indicates the key to be searched.

Return value

This function returns a pair of iterator.

Example

Let's look at the following example, where we are going to demonstrate the baisc usage of equal_range() function.

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "A"}, {2, "B"}, {3, "C"}, {3, "D"}};
    auto x = a.equal_range(3);
    std::cout << "Elements with key 3:" << std::endl;
    for (auto y = x.first; y != x.second; ++y) {
        std::cout << y->first << ": " << y->second << std::endl;
    }
    return 0;
}

Output

Output of the above code is as follows −

Elements with key 3:
3: C
3: D

Example

Consider the following example, where we are going to modify the elements in the range.

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a;
    a.insert({1, "A"});
    a.insert({1, "B"});
    a.insert({2, "Tutorix"});
    auto x = a.equal_range(1);
    for (auto y = x.first; y != x.second; ++y) {
        y->second = "TutorialsPoint";
    }
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

Output

Following is the output of the above code −

1: TutorialsPoint
1: TutorialsPoint
2: Tutorix

Example

In the following example, we are going to handle the non existing key.

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "apple"}, {2, "banana"}, {2, "blueberry"}};
    auto x = a.equal_range(3);
    if (x.first == x.second) {
        std::cout << "No element found with provided key." << std::endl;
    } else {
        for (auto y = x.first; y != x.second; ++y) {
            std::cout << y->first << ": " << y->second << std::endl;
        }
    }
    return 0;
}

Output

If we run the above code it will generate the following output −

No element found with provided key.

Example

Following is the example, where we are going to erase the elements in the range.

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "Hi"}, {1, "Hello"}, {2, "Vanakam"}};
    auto x = a.equal_range(1);
    a.erase(x.first, x.second);
    std::cout << "Elements after erasing :" << std::endl;
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

Output

Let us compile and run the above program, this will produce the following result −

Elements after erasing :
2: Vanakam
multimap.htm
Advertisements