multimap dan multiset
Izinkan key duplikat
multimap dan multiset adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Mengizinkan Duplikat
std::multimap dan std::multiset seperti map dan set, tetapi mengizinkan kunci duplikat. Semuanya tetap terurut.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 3, 3};
for (int x : ms) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Penyisipan multiset
Setiap insert() ke dalam multiset berhasil, termasuk untuk nilai yang berulang, sehingga kontainer bertambah setiap kali.
#include <iostream>
#include <set>
int main() {
std::multiset<std::string> ms;
ms.insert("a");
ms.insert("a");
ms.insert("a");
std::cout << ms.size() << " elements\n";
return 0;
}Menghitung Duplikat
count() kini mengembalikan berapa kali sebuah nilai muncul, yang bisa lebih dari 1.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{5, 5, 5, 7, 9, 9};
std::cout << "5 appears " << ms.count(5) << " times\n";
std::cout << "9 appears " << ms.count(9) << " times\n";
return 0;
}Menghapus Semua atau Satu
erase(key) menghapus setiap elemen yang cocok. Untuk menghapus satu saja, hapus satu iterator dari find().
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 2, 3};
ms.erase(ms.find(2));
std::cout << "count of 2: " << ms.count(2) << '\n';
return 0;
}Dasar-Dasar multimap
std::multimap memetakan kunci ke nilai, tetapi memungkinkan satu kunci dipetakan ke banyak nilai. Catatan: multimap tidak memiliki operator[].
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm;
mm.insert({"fruit", 1});
mm.insert({"fruit", 2});
mm.insert({"veg", 3});
std::cout << mm.size() << " pairs\n";
return 0;
}Melakukan Iterasi pada multimap
Iterasi menghasilkan semua pasangan dalam urutan kunci terurut, termasuk kunci yang berulang.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"a", 1}, {"a", 2}, {"b", 3}};
for (const auto& [k, v] : mm) {
std::cout << k << " => " << v << '\n';
}
return 0;
}equal_range
equal_range(key) mengembalikan sepasang iterator yang membatasi semua elemen dengan kunci tersebut, yaitu cara standar untuk membaca setiap nilai dari sebuah kunci.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"x", 10}, {"x", 20}, {"y", 30}};
auto range = mm.equal_range("x");
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << ' ';
}
std::cout << '\n';
return 0;
}Mengelompokkan Data
Multimap ideal untuk pengelompokan: misalnya, banyak orang dapat berbagi kota yang sama.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, std::string> byCity{
{"NYC", "Alice"}, {"NYC", "Bob"}, {"LA", "Carol"}
};
auto r = byCity.equal_range("NYC");
for (auto it = r.first; it != r.second; ++it)
std::cout << it->second << '\n';
return 0;
}lower_bound pada multiset
Pencarian rentang terurut tetap berfungsi. lower_bound menemukan elemen pertama yang tidak kurang dari target.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 4};
auto it = ms.lower_bound(2);
std::cout << "first >= 2 is " << *it << '\n';
return 0;
}Daftar Frekuensi Terurut
Karena elemen tetap terurut, multiset secara alami menghasilkan keluaran terurut dengan pengulangan tetap dipertahankan.
#include <iostream>
#include <set>
int main() {
std::multiset<int> scores{90, 75, 90, 60, 75, 90};
for (int s : scores) std::cout << s << ' ';
std::cout << '\n';
return 0;
}Total dan Unik
size() menghitung setiap elemen, termasuk duplikat, sedangkan untuk melakukan iterasi pada kunci unik, Anda harus melewati pengulangan sendiri.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 1, 2, 3, 3};
std::cout << "total: " << ms.size() << '\n';
std::cout << "count of 1: " << ms.count(1) << '\n';
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang penghapusan dari multiset.
Ringkasan
Anda telah mempelajari bahwa multimap dan multiset:
- mengizinkan kunci duplikat sambil tetap terurut
- menggunakan
equal_rangeuntuk membaca semua nilai yang memiliki kunci yang sama - membuat
erase(key)menghapus semua kecocokan, sedangkan penghapusan sebuah iterator hanya menghapus satu
Selanjutnya, Anda akan mengatur pengurutan dengan pembanding khusus.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “multimap dan multiset” gratis?
Ya — teks lengkap “multimap dan multiset” 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 “multimap dan multiset”?
Izinkan key duplikat 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 3 dari 4.
Berapa lama pelajaran “multimap dan multiset” 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.
Semua pelajaran dalam kursus ini
- std::map
- std::set
- multimap dan multiset
- Komparator Kustom