Skip to content
Related Articles

# How to traverse through all values for a given key in multimap?

• Difficulty Level : Easy
• Last Updated : 12 Jul, 2021

Given a multimap and a key of the multimap, our task is to simply display the (key – value) pairs of the given key. In multimap we can have multiple (key – value) pair for the same key. Suppose our multimap contains

key     value
1         10
2         20
2         30
2         40
3         50
4         60
4         70

key : 2
key     value
2         20
2         30
2         40

Like in unordered_map in C++ STL we cant fetch values like

int key = 2;
multimap  map;

// insert values in map
cout << "Key : " << key;
cout << "Value : " < second;

Output :

Key : 2
Value : 20

Because the above method will only return the first occurrence of the key present, This method fails if there are multiple (key – value) pairs for the same key.
There are two ways by which we can achieve the expected results :
Method 1 (Simple Traversal) Traverse through whole map and whenever the key is equal to given key we display the key-value pair.

## C++

 // CPP program to find all values for a// given key.#include using namespace std; int main(){    multimap map;     // insert the values in multimap    map.insert(make_pair(1, 10));    map.insert(make_pair(2, 20));    map.insert(make_pair(2, 30));    map.insert(make_pair(2, 40));    map.insert(make_pair(3, 50));    map.insert(make_pair(4, 60));    map.insert(make_pair(4, 70));         int key = 2;       for (auto itr = map.begin(); itr != map.end(); itr++)           if (itr -> first == key)                   cout << itr -> first << "  "                 << itr -> second << endl;     return 0;}

## Java

 // JAVA program to find all values for a// given key.import java.util.*; class GFG{ static class pair{    int first, second;    public pair(int first, int second)    {        this.first = first;        this.second = second;    }} public static void main(String[] args){    HashSet map = new LinkedHashSet<>();     // add the values in multimap    map.add(new pair(1, 10));    map.add(new pair(2, 20));    map.add(new pair(2, 30));    map.add(new pair(2, 40));    map.add(new pair(3, 50));    map.add(new pair(4, 60));    map.add(new pair(4, 70));         int key = 2;    for (pair itr : map)        if (itr.first == key)                System.out.println(itr.first+ " "                + itr.second);}} // This code is contributed by 29AjayKumar

## Python3

 # Python program to find all values for a# given key.map = [] # insert the values in multimapmap.append((1, 10));map.append((2, 20));map.append((2, 30));map.append((2, 40));map.append((3, 50));map.append((4, 60));map.append((4, 70)); key = 2;   for i in map:    if i[0] == key:        print(i[0],i[1]) # This code is contributed by shubhamsingh10

## C#

 // C# program to find all values for a// given key.using System;using System.Collections.Generic; class GFG{ class pair{    public int first, second;    public pair(int first, int second)    {        this.first = first;        this.second = second;    }} // Driver codepublic static void Main(String[] args){    HashSet map = new HashSet();     //.Add the values in multimap    map.Add(new pair(1, 10));    map.Add(new pair(2, 20));    map.Add(new pair(2, 30));    map.Add(new pair(2, 40));    map.Add(new pair(3, 50));    map.Add(new pair(4, 60));    map.Add(new pair(4, 70));         int key = 2;    foreach (pair itr in map)        if (itr.first == key)                Console.WriteLine(itr.first+ " "                + itr.second);}} // This code is contributed by Rajput-Ji

## Javascript



Output:

2  20
2  30
2  40

Method 2(Using Binary Search)Find the lower_bound and upper_bound for the given key and traverse between them.
lower_bound(key) : returns the iterator pointing to the first element which is greater than or
equal to key.
upper_bound(key) : returns the iterator pointing to the first element which is greater than key.

key     value
1         10
2         20 <-- lower_bound(20)
2         30
2         40
3         50 <-- upper_bound(20)
4         60
4         70

## CPP

 #include using namespace std; int main(){    multimap map;     // insert the values in multimap    map.insert(make_pair(1, 10));    map.insert(make_pair(2, 20));    map.insert(make_pair(2, 30));    map.insert(make_pair(2, 40));    map.insert(make_pair(3, 50));    map.insert(make_pair(4, 60));    map.insert(make_pair(4, 70));         int key = 2;       auto itr1 = map.lower_bound(key);    auto itr2 = map.upper_bound(key);         while (itr1 != itr2)       {        if (itr1 -> first == key)           cout << itr1 -> first << "  "                 << itr1 -> second << endl;               itr1++;    }       return 0;}

Output:

2  20
2  30
2  40

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up