Dado un mapa múltiple y una clave del mapa múltiple, nuestra tarea es simplemente mostrar los pares (clave-valor) de la clave dada. En multimapa podemos tener varios pares (clave-valor) para la misma clave. Supongamos que nuestro mapa múltiple contiene
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
Al igual que en unordered_map en C++ STL, no podemos obtener valores como
int key = 2; multimap map; // insert values in map cout << "Key : " << key; cout << "Value : " < second;
Producción :
Key : 2 Value : 20
Debido a que el método anterior solo devolverá la primera aparición de la clave presente, este método falla si hay varios pares (clave-valor) para la misma clave.
Hay dos formas en las que podemos lograr los resultados esperados:
Método 1 (Recorrido simple) Recorra todo el mapa y siempre que la clave sea igual a la clave dada, mostramos el par clave-valor.
C++
// 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
// 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
Python3
# Python program to find all values for a # given key. map = [] # insert the values in multimap map.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 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
Javascript
<script> class pair { constructor(first,second) { this.first=first; this.second=second; } } let map = new Set(); // 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)); 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>
Producción:
2 20 2 30 2 40
Método 2 (usando la búsqueda binaria) Encuentre el límite inferior y el límite superior para la clave dada y recorra entre ellos.
lower_bound(key) : devuelve el iterador que apunta al primer elemento que es mayor o
igual que key.
upper_bound(key) : devuelve el iterador que apunta al primer elemento que es mayor que 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; }
Producción:
2 20 2 30 2 40
Publicación traducida automáticamente
Artículo escrito por foreverrookie y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA