std::unordered_map
Rask hashbasert oppslag
std::unordered_map er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva er unordered_map?
std::unordered_map lagrer nøkkel-verdi-par i en hash-tabell. Oppslag, innsetting og sletting tar konstant tid i gjennomsnitt, men elementene har ingen sortert rekkefølge.
#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 vs. unordered_map
Velg ut fra behovene:
map: sortert, operasjoner i O(log n).unordered_map: usortert, operasjoner i O(1) i gjennomsnitt.
Bruk unordered_map når du bare trenger raske oppslag.
#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;
}Sette inn og oppdatere
Samme API som map: bruk [], insert() eller 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;
}Oppslag med find
find() returnerer en iterator eller end(). Dette hindrer utilsiktet innsetting av en standardverdi slik [] ville gjort.
#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;
}Kontrollere om en verdi finnes
count() returnerer 0 eller 1, og C++20 introduserer contains() for en tydelig boolsk kontroll.
#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;
}Iterering
Du kan iterere, men rekkefølgen er uspesifisert. Stol aldri på at den er sortert eller følger innsettingsrekkefølgen.
#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;
}Slette
erase() sletter etter nøkkel og returnerer antallet elementer som ble slettet.
#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;
}Rask frekvenstelling
For store datasett der rekkefølgen ikke spiller noen rolle, teller unordered_map frekvenser raskere enn 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;
}Bruke at()
at() returnerer en referanse og kaster std::out_of_range hvis en nøkkel mangler, uten å sette inn noe.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"score", 42}};
std::cout << m.at("score") << '\n';
return 0;
}Standardinnsetting via []
Hvis du bruker [] på en manglende nøkkel, settes den inn med en verdibasert initialisert verdi (0 for int). Vær forsiktig: Beholderen vokser i stillhet.
#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;
}Tømme beholderen
clear() tømmer tabellen, og empty() angir om den ikke inneholder noen elementer.
#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;
}Rask sjekk
Test forståelsen din av rekkefølgen i unordered_map.
Oppsummering
Du har lært at std::unordered_map:
- bruker en hash-tabell for operasjoner i O(1) i gjennomsnitt
- ikke har noen garantert rekkefølge
- har samme API som
map(find,count,at,erase)
Deretter skal du se på unordered_set for rask lagring av unike elementer.
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «std::unordered_map» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «std::unordered_map», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «std::unordered_map»?
Rask hashbasert oppslag Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C++ Academy?
Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «std::unordered_map»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?
Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- std::unordered_map
- unordered_set
- Egendefinerte hashfunksjoner
- Ytelsesvurderinger