Verificare la presenza di chiavi
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 26 di 56.
Sebbene l’operatore delle parentesi quadre sia comodo per accedere ai valori della mappa, c’è un potenziale problema: cosa succede se provi ad accedere a una chiave che non esiste? Come hai imparato nella lezione precedente, usare [] con una chiave inesistente crea automaticamente quella chiave con un valore predefinito.
A volte vuoi verificare se una chiave esiste prima di accedervi, senza creare accidentalmente nuove voci. È qui che il metodo .count() diventa utile. Ti dice se una chiave specifica è presente nella mappa.
Il metodo .count() restituisce 1 se la chiave esiste e 0 se non esiste:
std::map<std::string, int> scores;
scores["Alice"] = 95;
if (scores.count("Alice")) {
std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
std::cout << "Alice not found" << std::endl;
}Questo approccio ti permette di verificare in sicurezza l’esistenza di una chiave e di gestire adeguatamente entrambi i casi, evitando che vengano create voci indesiderate nella tua mappa.
Sfida
FacileCrea un programma che gestisca un sistema di prestito di libri di una biblioteca usando una std::map. Il tuo programma terrà traccia dei libri disponibili e userà il metodo .count() per verificare in sicurezza se i libri esistono prima di tentare di accedere alle relative informazioni.
Verranno forniti i seguenti input:
- Un intero
nche rappresenta il numero di libri nella biblioteca - Poi
ncoppie di input:- Una stringa che rappresenta il titolo del libro
- Un intero che rappresenta il numero di copie disponibili
- Un intero
mche rappresenta il numero di richieste di libri da verificare - Poi
mstringhe che rappresentano i titoli dei libri da cercare
Il tuo programma dovrebbe:
- Creare una
std::map<std::string, int>chiamatalibrary - Leggere il numero di libri e popolare la mappa con i titoli dei libri e le rispettive copie disponibili
- Leggere il numero di richieste di libri
- Per ogni richiesta di un libro, usare il metodo
.count()per verificare se il libro esiste nella biblioteca - Stampare il messaggio appropriato in base al fatto che il libro sia stato trovato o meno
Usa il seguente formato esatto per l'output:
Per ogni richiesta di un libro:
- Se il libro esiste:
Book "[book title]" is available with [number] copies - Se il libro non esiste:
Book "[book title]" is not available in the library
Usa il metodo .count() in un'istruzione if per verificare che il libro esista prima di accedere al suo valore. Se library.count(bookTitle) restituisce 1, il libro esiste e puoi accedere in sicurezza a library[bookTitle] per ottenere il numero di copie. Se restituisce 0, il libro non esiste nella biblioteca.
Provalo tu
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Leggi il numero di libri
int n;
cin >> n;
// Crea la mappa della biblioteca
map<string, int> library;
// Leggi le informazioni sui libri e popola la mappa
for (int i = 0; i < n; i++) {
string title;
int copies;
cin >> title >> copies;
library[title] = copies;
}
// Leggi il numero di richieste di libri
int m;
cin >> m;
// TODO: Scrivi il tuo codice qui sotto
// Elabora ogni richiesta di libro usando il metodo .count()
// Controlla se il libro esiste e stampa il messaggio appropriato
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 puntatori4Mappe (coppie chiave-valore)
Introduzione a std::mapCreare una mappaAccedere ai valori e modificarliVerificare la presenza di chiaviRimuovere coppieIterare su una mappaRiepilogo - Frequenza delle parole2Vettori (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àEsercitati da solo: Compilatore C++ online