Linguaggio C++

Libreria Map

Introduzione alla libreria map del C++: contenitore associativo ordinato, coppie chiave-valore, metodi principali e laboratorio guidato.

La libreria <map> fornisce il contenitore std::map, una struttura associativa che memorizza coppie (chiave → valore) mantenendo le chiavi in ordine crescente.

Internamente usa un albero bilanciato (Red-Black Tree), per cui garantisce:

  • ricerca in O(log n)
  • inserimento e cancellazione in O(log n)
  • nessun duplicato nelle chiavi

1️⃣ Inclusione della libreria


#include <map>
using namespace std;

2️⃣ Dichiarazione e inizializzazione


map eta = {
    {"Luca", 20},
    {"Anna", 19},
    {"Paolo", 25}
};

Le chiavi sono ordinate alfabeticamente: Anna, Luca, Paolo.


3️⃣ Proprietà principali di std::map

CaratteristicaDescrizione
Ordine✔️ Ordinato per chiave
Duplicati❌ Non ammessi nelle chiavi
Struttura internaAlbero Red-Black
RicercaO(log n)
Accesso valorim[key] o m.at(key)

4️⃣ Metodi principali di map

MetodoDescrizione
operator[]Accede o crea un elemento
at(key)Accede al valore (controllo errori)
insert({key, value})Inserisce una coppia
erase(key)Rimuove un elemento
find(key)Restituisce iteratore alla chiave
count(key)Ritorna 1 se esiste, 0 altrimenti
size()Numero elementi
clear()Svuota il contenitore

5️⃣ Inserimento e accesso


map eta;

eta["Marco"] = 30;       // inserisce
eta["Anna"] = 18;        // inserisce
eta["Marco"] = 31;       // sovrascrive valore

cout << eta["Marco"];    // 31

6️⃣ Uso di at() per maggiore sicurezza


cout << eta.at("Anna"); // ok
cout << eta.at("X");    // errore runtime

7️⃣ Iterazione ordinata


for(auto& p : eta)
    cout << p.first << " = " << p.second << endl;

p.first → chiave — p.second → valore


8️⃣ Ricerca e cancellazione


if(eta.count("Anna"))
    cout << "Anna trovata!";

eta.erase("Marco");

9️⃣ lower_bound e upper_bound

Funzionano come nel set, perché map è ordinata:


auto it = eta.lower_bound("Luca"); // primo >= "Luca"
cout << it->first << ": " << it->second;

🔟 Esempio completo


map studenti;

studenti[101] = "Luca";
studenti[103] = "Marco";
studenti[102] = "Anna";

for(auto& s : studenti)
    cout << s.first << " - " << s.second << endl;
LABORATORIO

Uso del Contenitore map

In questo laboratorio imparerai a usare std::map per associare chiavi e valori, eliminare duplicati, ordinare automaticamente i dati e cercare informazioni in modo rapido.


1 Registro studenti

Inserisci 5 studenti con matricola (int) → nome (string). Se una matricola viene reinserita, il valore deve essere aggiornato.


map registro;

for(int i=0; i<5; i++){
    int mat;
    string nome;
    cin >> mat >> nome;
    registro[mat] = nome;
}

2 Ricerca per matricola


int mat;
cin >> mat;

if(registro.count(mat))
    cout << registro[mat];
else
    cout << "Matricola non trovata.";

3 Stampa ordinata


for(auto& s : registro)
    cout << s.first << " - " << s.second << endl;

4 Esercizi

  • Crea un dizionario italiano-inglese (word → translation).
  • Conta quante volte appare ogni parola in una frase.
  • Implementa una rubrica: nome → numero di telefono.
  • Ordina automaticamente prodotti con codice → prezzo.