std::unordered_map
Ricerca rapida basata su hash
std::unordered_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'è unordered_map?
std::unordered_map memorizza coppie chiave-valore in una tabella hash. In media, la ricerca, l'inserimento e la cancellazione richiedono un tempo costante, ma gli elementi non hanno un ordine ordinato.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << ages["Alice"] << '\n';
return 0;
}map e unordered_map
Scelga in base alle necessità:
map: ordinata, operazioni O(log n).unordered_map: non ordinata, operazioni O(1) in media.
Usi unordered_map quando Le servono solo ricerche rapide.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
std::cout << m.size() << " entries (order not guaranteed)\n";
return 0;
}Inserire e aggiornare
La stessa API di map: usi [], insert() oppure emplace().
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
m["x"] = 1;
m.insert({"y", 2});
m.emplace("z", 3);
std::cout << m.size() << '\n';
return 0;
}Cercare con find
find() restituisce un iteratore oppure end(). In questo modo si evita di inserire accidentalmente un valore predefinito, come farebbe [].
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}};
auto it = m.find("a");
if (it != m.end()) std::cout << it->second << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Verificare l'esistenza
count() restituisce 0 o 1, mentre C++20 aggiunge contains() per un controllo booleano più chiaro.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"key", 99}};
std::cout << m.count("key") << '\n';
std::cout << m.count("missing") << '\n';
return 0;
}Iterare
È possibile iterare, ma l'ordine è non specificato. Non faccia mai affidamento sul fatto che sia ordinato o che rispetti l'ordine di inserimento.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
int total = 0;
for (const auto& [k, v] : m) total += v;
std::cout << "sum = " << total << '\n';
return 0;
}Cancellare
erase() rimuove gli elementi in base alla chiave e restituisce il numero di elementi rimossi.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
m.erase("a");
std::cout << m.count("a") << ' ' << m.size() << '\n';
return 0;
}Contare rapidamente le frequenze
Per grandi quantità di dati in cui l'ordine non è importante, unordered_map conta le frequenze più velocemente di map.
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::string items[] = {"a", "b", "a", "c", "b", "a"};
std::unordered_map<std::string, int> freq;
for (const auto& s : items) freq[s]++;
std::cout << "a appears " << freq["a"] << " times\n";
return 0;
}Usare at()
at() restituisce un riferimento e genera std::out_of_range se la chiave manca, senza mai inserirla.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"score", 42}};
std::cout << m.at("score") << '\n';
return 0;
}Inserimento predefinito tramite []
L'accesso a una chiave mancante con [] la inserisce con un valore inizializzato secondo il valore predefinito (0 per gli int). Faccia attenzione: la mappa cresce silenziosamente.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
std::cout << m["new"] << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Svuotare la mappa
clear() svuota la tabella e empty() indica se non contiene elementi.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, int> m{{1, 1}, {2, 2}};
m.clear();
std::cout << std::boolalpha << m.empty() << '\n';
return 0;
}Verifica rapida
Verifichi la Sua comprensione dell'ordinamento di unordered_map.
Riepilogo
Ha imparato che std::unordered_map:
- usa una tabella hash per operazioni O(1) in media
- non ha un ordine garantito
- condivide la stessa API di
map(find,count,at,erase)
Ora vedrà unordered_set per memorizzare rapidamente elementi unici.
Impara C++ con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 51
- Lezioni
- 203
Domande Frequenti
La lezione «std::unordered_map» è gratuita?
Sì — il testo completo di «std::unordered_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::unordered_map»?
Ricerca rapida basata su hash 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::unordered_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.