std::map
Penyimpanan key-value terurut
std::map adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Apa Itu std::map?
std::map menyimpan pasangan kunci-nilai yang diurutkan berdasarkan kunci. Setiap kunci bersifat unik, dan pencarian, penyisipan, serta penghapusan berjalan dalam waktu logaritmik.
- Kunci dipertahankan dalam urutan terurut.
- Didukung oleh pohon pencarian biner yang seimbang.
#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;
}Menyisipkan Elemen
Anda dapat menyisipkan dengan operator[], insert(), atau emplace(). Menggunakan [] pada kunci yang tidak ada akan membuatnya dengan nilai bawaan.
#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;
}Iterasi Terurut
Melakukan iterasi pada std::map mengunjungi kunci dalam urutan menaik. Setiap elemen berupa std::pair dengan .first (kunci) dan .second (nilai).
#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;
}Menemukan Kunci
Gunakan find() untuk mencari kunci dengan aman. Fungsi ini mengembalikan iterator ke elemen tersebut, atau end() jika tidak ditemukan.
#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;
}Memeriksa Keberadaan
Untuk memeriksa apakah kunci ada tanpa membuatnya, gunakan count() (mengembalikan 0 atau 1) atau contains() di 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;
}Memperbarui Nilai
Menetapkan ulang nilai untuk sebuah kunci akan memperbarui nilainya secara langsung. Map hanya menyimpan satu nilai untuk setiap kunci.
#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;
}Menghapus Elemen
erase() menghapus elemen berdasarkan kunci atau iterator. Jika diberi kunci, fungsi ini mengembalikan jumlah elemen yang dihapus.
#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;
}Menggunakan at()
at() mengembalikan referensi ke nilai untuk sebuah kunci dan melempar std::out_of_range jika kunci tersebut tidak ada. Berbeda dari [], fungsi ini tidak pernah menyisipkan elemen.
#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;
}Menghitung Frekuensi Kata
Salah satu penggunaan klasik std::map adalah menghitung kemunculan. Operator [] menginisialisasi kunci baru dengan nilai bawaan 0, sehingga ++ langsung berfungsi.
#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;
}Pengikatan Terstruktur
C++17 memungkinkan Anda membongkar setiap pasangan dengan pengikatan terstruktur, sehingga kunci dan nilai mendapatkan nama yang mudah dibaca.
#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;
}Memeriksa Apakah Kosong
empty() melaporkan apakah map tidak memiliki elemen, sedangkan clear() menghapus semuanya sekaligus.
#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;
}Uji Cepat
Uji pemahaman Anda tentang pengurutan std::map.
Ringkasan
Anda telah mempelajari bahwa std::map:
- menyimpan kunci unik yang terurut dan memetakannya ke nilai
- mendukung
insert,[],find,count,at, danerase - melakukan iterasi dalam urutan kunci menaik dengan pasangan yang dapat dibongkar melalui pengikatan terstruktur
Selanjutnya, Anda akan mempelajari std::set untuk menyimpan hanya nilai unik yang terurut.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “std::map” gratis?
Ya — teks lengkap “std::map” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “std::map”?
Penyimpanan key-value terurut Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “std::map” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.