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

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

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

## 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 code ` `public` `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 `

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

 `#include ` `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
```

My Personal Notes arrow_drop_up

Interested in problems and solving them

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : 29AjayKumar, Rajput-Ji

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.