Menghapus Pasangan
Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 27 dari 56.
Terkadang kamu perlu menghapus pasangan kunci-nilai dari map saat tidak lagi diperlukan. Method .erase() menyediakan cara mudah untuk menghapus elemen dengan menentukan kunci yang ingin kamu hapus.
Untuk menghapus sebuah elemen dari map, cukup panggil .erase() dengan kunci sebagai argumen:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
scores.erase("Bob"); // Menghapus entri Bob sepenuhnyaSetelah memanggil erase("Bob"), map hanya akan berisi nilai Alice dan Carol. Jika kamu mencoba menghapus kunci yang tidak ada di map, operasi tersebut tidak melakukan apa pun, dan tidak terjadi error.
Saat melakukan iterasi pada map dengan for loop berbasis rentang, setiap elemen adalah std::pair yang berisi key dan value. Kamu dapat mengakses key dengan .first dan value dengan .second:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Ini akan mencetak setiap nama dan skor dalam urutan alfabetis, karena std::map mengurutkan kuncinya secara otomatis.
Method ini sangat berguna untuk menjaga struktur data tetap rapi, menghapus informasi yang sudah usang, atau menerapkan fitur yang memungkinkan pengguna menghapus entri dari aplikasi kamu.
Tantangan
MudahBuat program yang mengelola direktori kontak menggunakan std::map. Programmu akan menyimpan nama kontak dan nomor telepon, lalu memungkinkan pengguna menghapus kontak tertentu dari direktori menggunakan method .erase().
Input berikut akan diberikan:
- Bilangan bulat
nyang menunjukkan jumlah kontak awal - Kemudian
npasang input:- String yang menunjukkan nama kontak
- String yang menunjukkan nomor telepon
- Bilangan bulat
myang menunjukkan jumlah kontak yang akan dihapus - Kemudian
mstring yang menunjukkan nama kontak yang akan dihapus
Programmu harus:
- Membuat
std::map<std::string, std::string>bernamacontacts - Membaca jumlah kontak awal dan mengisi map dengan nama kontak serta nomor telepon
- Mencetak direktori kontak awal dengan format yang ditunjukkan di bawah
- Membaca jumlah kontak yang akan dihapus
- Untuk setiap nama kontak yang akan dihapus, menggunakan method
.erase()untuk menghapusnya dari map - Mencetak direktori kontak yang telah diperbarui setelah semua penghapusan
Gunakan format output persis seperti berikut:
Direktori awal:
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Direktori yang diperbarui setelah penghapusan:
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Jika direktori kosong setelah semua kontak dihapus, cetak:
Updated Contact Directory:
Directory is emptyKontak harus dicetak sesuai urutannya saat melakukan iterasi melalui map (berdasarkan urutan alfabet nama kontak). Gunakan perulangan for berbasis rentang untuk melakukan iterasi melalui map pada kedua kesempatan, dengan mengakses setiap pasangan kunci-nilai menggunakan pair.first untuk nama kontak dan pair.second untuk nomor telepon. Ingat, mencoba menghapus kontak yang tidak ada tidak akan menyebabkan error, map hanya akan tetap tidak berubah.
Coba sendiri
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Baca jumlah kontak awal
int n;
cin >> n;
// Buat map contacts
map<string, string> contacts;
// Baca kontak awal
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Tambahkan kontak ke map
}
// Tampilkan direktori awal
cout << "Initial Contact Directory:" << endl;
// TODO: Tampilkan semua kontak menggunakan range-based for loop
// Baca jumlah kontak yang akan dihapus
int m;
cin >> m;
// Hapus kontak
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// TODO: Hapus kontak menggunakan method .erase()
}
// Tampilkan direktori terbaru
cout << "Updated Contact Directory:" << endl;
// TODO: Tampilkan kontak yang tersisa atau "Directory is empty" jika kosong
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Pointer dan Memori
Apa Itu Pointer?Operator Address-OfOperator DereferencePointer NullPointer dan ArrayMemori Dinamis dengan 'new'Membebaskan Memori dengan 'delete'Rangkuman: Latihan Pointer4Map (Pasangan Kunci-Nilai)
Mengenal std::mapMembuat MapMengakses dan Mengubah NilaiMemeriksa KunciMenghapus PasanganMelakukan Perulangan pada MapRangkuman: Frekuensi Kata2Vektor (array Dinamis)
Memperkenalkan std::vectorMembuat VektorMenambahkan ElemenMengakses ElemenUkuran VektorIterasi dengan for loopFor loop Berbasis RentangMenghapus ElemenRangkuman: Operasi VektorLatihan sendiri: Compiler C++ online