Menu
Coddy logo textTech

Ricerca di un valore in una map

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 55 di 56.

challenge icon

Sfida

Facile

Crea un programma che implementi un sistema di ricerca inversa per trovare tutte le chiavi associate a un valore specifico in una mappa. Questa sfida metterà alla prova la tua capacità di combinare l’iterazione su una mappa, il confronto dei valori e la creazione di un vettore per cercare in modo efficiente tra le coppie chiave-valore.

Verranno forniti i seguenti input:

  • Un intero n che rappresenta il numero di coppie chiave-valore da aggiungere alla mappa
  • Poi n coppie di input, ciascuna composta da:
    • Una stringa key che rappresenta la chiave
    • Un intero value che rappresenta il valore
  • Un intero targetValue che rappresenta il valore da cercare

Il tuo programma dovrebbe:

  1. Creare una funzione denominata findKeysWithValue che accetta come parametri una std::map<std::string, int> e un intero
  2. La funzione dovrebbe restituire un std::vector<std::string> contenente tutte le chiavi che hanno il valore specificato
  3. Nella funzione main, creare una mappa e popolarla con le coppie chiave-valore dell’input
  4. Chiamare la funzione findKeysWithValue passando la mappa e il valore da cercare
  5. Stampare prima il numero di chiavi corrispondenti, poi stampare ogni chiave corrispondente su una riga separata

Usa il seguente formato di output esatto:

Prima riga - numero di chiavi corrispondenti:

Keys found: [number_of_matching_keys]

Poi ogni chiave corrispondente su una riga separata:

[matching_key_1]
[matching_key_2]
...

Se nessuna chiave ha il valore cercato, stampa solo:

Keys found: 0

Ricorda che la tua funzione findKeysWithValue dovrebbe creare un nuovo vettore vuoto, scorrere la mappa usando un ciclo for basato su intervallo e utilizzare un’istruzione if per confrontare il valore di ogni coppia con quello cercato. Quando viene trovata una corrispondenza, aggiungi la chiave (accessibile tramite pair.first) al vettore dei risultati usando push_back(). La funzione dovrebbe restituire il vettore contenente tutte le chiavi corrispondenti.

Provalo tu

#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;

// TODO: Scrivi qui la tua funzione findKeysWithValue

int main() {
    // Leggi il numero di coppie chiave-valore
    int n;
    cin >> n;
    
    // Crea una mappa per memorizzare le coppie chiave-valore
    map<string, int> keyValueMap;
    
    // Leggi n coppie chiave-valore
    for (int i = 0; i < n; i++) {
        string key;
        int value;
        cin >> key >> value;
        keyValueMap[key] = value;
    }
    
    // Leggi il valore da cercare
    int targetValue;
    cin >> targetValue;
    
    // TODO: Chiama la tua funzione findKeysWithValue e memorizza il risultato
    
    // TODO: Stampa i risultati nel formato richiesto
    // Stampa prima "Keys found: [count]"
    // Poi stampa ogni chiave corrispondente su una riga separata
    
    return 0;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online