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
| Caratteristica | Descrizione |
|---|---|
| Ordine | ✔️ Ordinato per chiave |
| Duplicati | ❌ Non ammessi nelle chiavi |
| Struttura interna | Albero Red-Black |
| Ricerca | O(log n) |
| Accesso valori | m[key] o m.at(key) |
4️⃣ Metodi principali di map
| Metodo | Descrizione |
|---|---|
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.
- Libreria
<map> - Accesso tramite chiavi
- Operator[] e at()
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.