Dado un conjunto de N pares como pares (clave, valor) en un mapa y un número entero K , la tarea es encontrar todas las claves asignadas al valor dado K . Si no hay un valor clave asignado a K , imprima «-1» . Ejemplos:
Entrada: Mapa[] = { {1, 3}, {2, 3}, {4, -1}, {7, 2}, {10, 3} }, K = 3
Salida: 1 2 10
Explicación:
El 3 valores clave que se asignan al valor 3 son 1, 2, 10.
Entrada: Map[] = { {1, 3}, {2, 3}, {4, -1}, {7, 2}, {10 , 3} }, K = 10
Salida: -1
Explicación:
No hay ningún valor clave que esté asignado al valor 10.
Enfoque: la idea es atravesar el mapa dado e imprimir todos los valores clave que se asignan al valor K dado . A continuación se muestra el ciclo utilizado para encontrar todos los valores clave:
for(auto &it : Mapa) {
if(it.segundo == K) {
print(it.primero)
}
}
Si no hay un valor asignado con K , imprima «-1» .
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ program for the above approach #include "bits/stdc++.h" using namespace std; // Function to find the key values // according to given mapped value K void printKey(map<int, int>& Map, int K) { // If a is true, then we have // not key-value mapped to K bool a = true; // Traverse the map for (auto& it : Map) { // If mapped value is K, // then print the key value if (it.second == K) { cout << it.first << ' '; a = false; } } // If there is not key mapped with K, // then print -1 if (a) { cout << "-1"; } } // Driver Code int main() { map<int, int> Map; // Given map Map[1] = 3; Map[2] = 3; Map[4] = -1; Map[7] = 2; Map[10] = 3; // Given value K int K = 3; // Function call printKey(Map, K); return 0; }
1 2 10
Complejidad de tiempo: O(N) , donde N es el número de pares almacenados en el mapa. Esto se debe a que estamos atravesando todos los pares una vez.
Espacio Auxiliar: O(N)