Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea 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 n che rappresenta il numero di libri nella biblioteca
  • Poi n coppie di input:
    • Una stringa che rappresenta il titolo del libro
    • Un intero che rappresenta il numero di copie disponibili
  • Un intero m che rappresenta il numero di richieste di libri da verificare
  • Poi m stringhe che rappresentano i titoli dei libri da cercare

Il tuo programma dovrebbe:

  1. Creare una std::map<std::string, int> chiamata library
  2. Leggere il numero di libri e popolare la mappa con i titoli dei libri e le rispettive copie disponibili
  3. Leggere il numero di richieste di libri
  4. Per ogni richiesta di un libro, usare il metodo .count() per verificare se il libro esiste nella biblioteca
  5. 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;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online