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

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++
Java
Python3
C#
Javascript
// CPP program to find all values for a// given key.#include <bits/stdc++.h>using namespace std; int main(){    multimap <int, int> 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 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 <pair> 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
# 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# 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<pair> map = new HashSet<pair>();     //.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
<script> class pair{    constructor(first,second)    {        this.first=first;        this.second=second;    }} let map = new Set();// add the values in multimapmap.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)); let key = 2;for (let itr of map.values())    if (itr.first == key)            document.write(itr.first+ " "                   + itr.second+"<br>");  // This code is contributed by rag2127</script>
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 <bits/stdc++.h>using namespace std; int main(){    multimap <int, int> 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
 
29AjayKumar
Rajput-Ji
rag2127
SHUBHAMSINGH10
cpp-multimap
STL
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.