Related Articles

Related Articles

How to traverse through all values for a given key in multimap?
  • Difficulty Level : Easy
  • Last Updated : 09 Dec, 2019

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++



filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 code
public 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

chevron_right


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
filter_none

edit
close

play_arrow

link
brightness_4
code

#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;
}

chevron_right


Output:

2  20
2  30
2  40

Rated as one of the most sought after skills in the industry, own the basics of coding with our C++ STL Course and master the very concepts by intense problem-solving.




My Personal Notes arrow_drop_up
Recommended Articles
Page :