C++ Academy · Lektion

std::map

Sorteret lagring af nøgler og værdier

Lektion 1 af 413 trin

std::map er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad er std::map?

std::map gemmer nøgle-værdi-par sorteret efter nøgle. Hver nøgle er unik, og opslag, indsættelser og sletninger udføres på logaritmisk tid.

  • Nøglerne holdes i sorteret rækkefølge.
  • Understøttes af et balanceret binært søgetræ.
#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;
}

Indsættelse af elementer

Du kan indsætte med operator[], insert() eller emplace(). Hvis du bruger [] med en manglende nøgle, oprettes den med en standardværdi.

#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;
}

Sorteret gennemløb

Når du gennemløber en std::map, besøges nøglerne i stigende rækkefølge. Hvert element er en std::pair med .first (nøgle) og .second (værdi).

#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;
}

Søgning efter nøgler

Brug find() til sikkert at slå en nøgle op. Den returnerer en iterator til elementet eller end(), hvis det ikke blev fundet.

#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;
}

Kontrol af eksistens

Hvis du vil teste, om en nøgle findes, uden at oprette den, skal du bruge count() (returnerer 0 eller 1) eller contains() i 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;
}

Opdatering af værdier

Hvis du tildeler en ny værdi til en nøgle, opdateres dens værdi på stedet. Mappet beholder kun én værdi pr. nøgle.

#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;
}

Sletning af elementer

erase() fjerner et element ud fra en nøgle eller en iterator. Når den får en nøgle, returnerer den antallet af fjernede elementer.

#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;
}

Brug af at()

at() returnerer en reference til værdien for en nøgle og kaster std::out_of_range, hvis nøglen mangler. I modsætning til [] indsætter den aldrig noget.

#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;
}

Optælling af ordhyppighed

En klassisk anvendelse af std::map er at tælle forekomster. Operatoren [] initialiserer nye nøgler med standardværdien 0, så ++ fungerer med det samme.

#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;
}

Strukturerede bindinger

C++17 lader dig pakke hvert par ud med strukturerede bindinger, så du kan give nøgle og værdi læsbare navne.

#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;
}

Kontrol af, om den er tom

empty() angiver, om mappet ikke har nogen elementer, og clear() fjerner dem alle på én gang.

#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;
}

Hurtig kontrol

Test din forståelse af rækkefølgen i std::map.

Opsummering

Du har lært, at std::map:

  • gemmer unikke, sorterede nøgler med tilknyttede værdier
  • understøtter insert, [], find, count, at og erase
  • gennemløbes i stigende nøglerækkefølge med par, som du kan pakke ud ved hjælp af strukturerede bindinger

Dernæst ser du std::set, som bruges til kun at gemme sorterede, unikke værdier.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “std::map” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “std::map”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “std::map”?

Sorteret lagring af nøgler og værdier Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “std::map”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. std::map
  2. std::set
  3. multimap og multiset
  4. Brugerdefinerede sammenligningsfunktioner
← Tilbage til C++ Academy