std::map
Sorteret lagring af nøgler og værdier
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,atogerase - 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.
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.