std::map
Memorizzazione ordinata di coppie chiave-valore
std::map è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cos'è std::map?
std::map memorizza coppie chiave-valore ordinate per chiave. Ogni chiave è univoca e le operazioni di ricerca, inserimento ed eliminazione hanno complessità logaritmica.
- Le chiavi vengono mantenute in ordine crescente.
- La struttura è basata su un albero binario di ricerca bilanciato.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << "Alice is " << ages["Alice"] << '\n';
return 0;
}Inserire elementi
È possibile inserire elementi con operator[], insert() o emplace(). Utilizzando [] su una chiave mancante, questa viene creata con un valore predefinito.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m;
m["one"] = 1;
m.insert({"two", 2});
m.emplace("three", 3);
std::cout << m.size() << " entries\n";
return 0;
}Iterazione ordinata
Iterare su una std::map visita le chiavi in ordine crescente. Ogni elemento è una std::pair con .first (chiave) e .second (valore).
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
for (const auto& p : m) {
std::cout << p.first << " = " << p.second << '\n';
}
return 0;
}Trovare le chiavi
Utilizzi find() per cercare una chiave in modo sicuro. Restituisce un iteratore all'elemento oppure end() se la chiave non viene trovata.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"x", 10}, {"y", 20}};
auto it = m.find("y");
if (it != m.end()) {
std::cout << "Found y = " << it->second << '\n';
} else {
std::cout << "Not found\n";
}
return 0;
}Verificare l'esistenza
Per verificare se una chiave esiste senza crearla, utilizzi count(), che restituisce 0 o 1, oppure contains() in C++20.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}};
std::cout << m.count("a") << '\n';
std::cout << m.count("z") << '\n';
return 0;
}Aggiornare i valori
Riassegnare una chiave aggiorna il suo valore in loco. La map mantiene un solo valore per ogni chiave.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> score;
score["player"] = 10;
score["player"] += 5;
std::cout << score["player"] << '\n';
return 0;
}Eliminare elementi
erase() rimuove un elemento tramite la chiave o un iteratore. Quando viene fornita una chiave, restituisce il numero di elementi rimossi.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
m.erase("b");
std::cout << m.size() << " left\n";
for (const auto& p : m) std::cout << p.first << ' ';
std::cout << '\n';
return 0;
}Utilizzare at()
at() restituisce un riferimento al valore associato a una chiave e genera std::out_of_range se la chiave manca. A differenza di [], non inserisce mai elementi.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"k", 42}};
std::cout << m.at("k") << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Contare la frequenza delle parole
Un uso classico di std::map consiste nel contare le occorrenze. L'operatore [] inizializza automaticamente le nuove chiavi al valore predefinito 0, quindi ++ funziona direttamente.
#include <iostream>
#include <map>
#include <string>
int main() {
std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
std::map<std::string, int> freq;
for (const auto& w : words) freq[w]++;
for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
return 0;
}Structured bindings
C++17 consente di scompattare ogni coppia con gli structured bindings, assegnando nomi chiari a chiave e valore.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"red", 1}, {"green", 2}};
for (const auto& [name, value] : m) {
std::cout << name << " -> " << value << '\n';
}
return 0;
}Verificare se è vuota
empty() indica se la map non contiene elementi, mentre clear() li rimuove tutti in una sola operazione.
#include <iostream>
#include <map>
int main() {
std::map<int, int> m{{1, 1}, {2, 4}};
std::cout << std::boolalpha << m.empty() << '\n';
m.clear();
std::cout << m.empty() << '\n';
return 0;
}Verifica rapida
Verifichi la comprensione dell'ordinamento di std::map.
Riepilogo
Ha imparato che std::map:
- memorizza chiavi univoche e ordinate associate a valori
- supporta
insert,[],find,count,atederase - itera in ordine crescente per chiave, con coppie che è possibile scompattare tramite gli structured bindings
Successivamente vedrà std::set, che serve a memorizzare solo valori univoci ordinati.
Domande Frequenti
La lezione «std::map» è gratuita?
Sì — il testo completo di «std::map» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «std::map»?
Memorizzazione ordinata di coppie chiave-valore Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «std::map»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.