C++ Academy · Lezione

std::unordered_map

Ricerca rapida basata su hash

Lezione 1 di 413 passaggi

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.

Gratis per iniziare

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.

Tutte le lezioni di questo corso

  1. std::unordered_map
  2. unordered_set
  3. Funzioni hash personalizzate
  4. Considerazioni sulle prestazioni
← Torna a C++ Academy