Menguasai std::map di C++: Panduan Komprehensif dengan Contoh Kode
Apa Itu std::map? Dalam Standard Template Library (STL) C++, std::map adalah kontainer asosiatif yang menyimpan elemen sebagai pasangan kunci-nilai. Setiap kunci unik dan kontainer secara otomatis menjaga elemennya terurut sesuai dengan fungsi perbandingan kunci (secara default, std::less). Nilai dapat berupa tipe apa pun dan diakses melalui kunci yang sesuai.
Menggunakan std::map? Kunci unik dan disimpan dalam urutan terurut, membuat operasi pencarian cepat (O(log n)). Ideal untuk skenario yang memerlukan array asosiatif atau kamus dengan urutan yang dijamin. Secara internal diimplementasikan sebagai pohon pencarian biner seimbang (pohon merah-hitam), yang menyediakan kinerja yang andal di semua operasi. Mendukung penyisipan, penghapusan, dan penelusuran yang cepat. API kaya yang terintegrasi dengan mulus dengan iterator dan algoritma STL. Sintaks Deklarasikan peta dengan:
std::map<KeyType, ValueType> mapName; KeyType – tipe kunci (harus dapat dibandingkan). ValueType – tipe nilai yang dipetakan. mapName – nama variabel. Contoh:
std::map<std::string, int> ageMap; Tipe Anggota key_type : Tipe kunci. mapped_type : Tipe nilai yang dipetakan. value_type : std::pair<const key_type, mapped_type> iterator : Iterator dua arah atas value_type. const_iterator , reverse_iterator , const_reverse_iterator size_type , difference_type Fungsi Bawaan begin() – iterator ke elemen pertama. end() – iterator setelah akhir. size() – jumlah elemen. empty() – apakah peta kosong. insert() – tambahkan pasangan kunci/nilai. find() – temukan elemen berdasarkan kunci. erase() – hapus elemen melalui iterator atau kunci. clear() – hapus semua elemen. Utilitas lain seperti count() dan lower_bound() juga tersedia. Melakukan Iterasi Elemen Peta Iterator memberi Anda kontrol penuh atas urutan penelusuran, yang selalu diurutkan berdasarkan kunci.
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> students; students.insert({200, "Alice"}); students.insert({201, "John"}); cout << "Map size is: " << students.size() << endl; cout << endl << "Default map order:" << endl; for (auto it = students.begin(); it != students.end(); ++it) { cout << it->first << ": " << it->second << endl; } return 0; } Output:
Menyisipkan Data ke std::map Gunakan insert() untuk entri baru; itu secara diam-diam menolak duplikat. Untuk menimpa kunci yang ada, gunakan insert_or_assign().
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{{1,3},{2,4},{3,5}}; m.insert({5,6}); // adds new pair m.insert({1,8}); // ignored, key 1 already exists m.insert_or_assign(1,6); // updates key 1 to value 6 cout << "Key\tElement\n"; for (auto& p : m) { cout << p.first << '\t' << p.second << '\n'; } return 0; } Output:
Mencari dalam Peta Menemukan kunci mudah dengan find(). Jika kunci ada, iterator yang dikembalikan menunjuk ke elemen; jika tidak, end() dikembalikan.
#include <iostream> #include <map> using namespace std; int main() { map<int, string> students; students.insert({200, "Alice"}); students.insert({201, "John"}); if (auto it = students.find(201); it != students.end()) { cout << "Key 201 has value: " << it->second << endl; } return 0; } Output:
Menghapus Data dari Peta Elemen dapat dihapus berdasarkan kunci atau iterator. Metode erase() hanya menginvalidasi iterator yang menunjuk ke elemen yang dihapus.
#include <iostream> #include <map> using namespace std; int main() { map<string, int> myMap; myMap["cow"] = 1; myMap["cat"] = 2; myMap["lion"] = 3; if (auto it = myMap.find("cat"); it != myMap.end()) { myMap.erase(it); } for (auto& p : myMap) { cout << p.first << ": " << p.second << endl; } return 0; } Output:
Ringkasan std::map adalah kontainer asosiatif terurut dengan kunci unik. Kunci menyediakan pencarian yang efisien; nilai menyimpan data terkait. Semua operasi inti berjalan dalam waktu logaritmik karena pohon merah-hitam yang mendasarinya. Iterator memungkini penelusuran, penyisipan, penghapusan, dan kueri rentang. Dengan insert_or_assign(), pembaruan nilai dilakukan dengan mudah. Gunakan find() untuk pemeriksaan keberadaan yang cepat dan akses langsung. Operasi hapus dapat menargetkan elemen individual atau membersihkan seluruh peta.