Ricerca di un valore in una map
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 55 di 56.
Sfida
FacileCrea 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
nche rappresenta il numero di coppie chiave-valore da aggiungere alla mappa - Poi
ncoppie di input, ciascuna composta da:- Una stringa
keyche rappresenta la chiave - Un intero
valueche rappresenta il valore
- Una stringa
- Un intero
targetValueche rappresenta il valore da cercare
Il tuo programma dovrebbe:
- Creare una funzione denominata
findKeysWithValueche accetta come parametri unastd::map<std::string, int>e un intero - La funzione dovrebbe restituire un
std::vector<std::string>contenente tutte le chiavi che hanno il valore specificato - Nella funzione main, creare una mappa e popolarla con le coppie chiave-valore dell’input
- Chiamare la funzione
findKeysWithValuepassando la mappa e il valore da cercare - 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: 0Ricorda 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
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attività6Insiemi (elementi unici)
Introduzione a std::setCreare un set e aggiungere elementiVerificare la presenza di elementiRimuovere elementiIterare su un setRiepilogo - numeri unici9Sfide finali
Filtraggio dei dati di un vectorRicerca di un valore in una mapPuntatori e array dinamiciEsercitati da solo: Compilatore C++ online