Çiftleri Kaldırma
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 27 / 56.
Bazen artık gerekmediğinde map’inizden anahtar-değer çiftlerini kaldırmanız gerekir. .erase() yöntemi, kaldırmak istediğiniz anahtarı belirterek öğeleri silmenin basit bir yolunu sunar.
Bir map'ten bir öğeyi kaldırmak için, anahtarı bağımsız değişken olarak vererek .erase() çağrısını yapmanız yeterlidir:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
scores.erase("Bob"); // Bob'un kaydını tamamen kaldırırerase("Bob") çağrıldıktan sonra map yalnızca Alice ve Carol'un puanlarını içerecektir. Haritada bulunmayan bir anahtarı silmeye çalışırsanız işlem basitçe hiçbir şey yapmaz - herhangi bir hata oluşmaz.
Bir map üzerinde aralık tabanlı bir for döngüsüyle yineleme yaparken her öğe, anahtarı ve değeri içeren bir std::pair değeridir. Anahtara .first, değere ise .second ile erişebilirsiniz:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Bu, her adı ve puanı alfabetik sırayla yazdırır; çünkü std::map anahtarlarını otomatik olarak sıralı tutar.
Bu yöntem, temiz veri yapılarının korunması, güncel olmayan bilgilerin kaldırılması veya kullanıcıların uygulamanızdaki girdileri silebilmesini sağlayan özelliklerin uygulanması için özellikle kullanışlıdır.
Görev
Kolaystd::map kullanarak bir kişi rehberini yöneten bir program oluştur. Programın kişi adlarını ve telefon numaralarını depolaması, ardından kullanıcıların .erase() yöntemini kullanarak rehberden belirli kişileri kaldırmasına olanak tanıması gerekiyor.
Aşağıdaki girdiler sağlanacaktır:
- İlk kişi sayısını temsil eden bir
ntamsayısı - Ardından
nadet girdi çifti:- Kişi adını temsil eden bir dize
- Telefon numarasını temsil eden bir dize
- Kaldırılacak kişi sayısını temsil eden bir
mtamsayısı - Ardından kaldırılacak kişi adlarını temsil eden
mdize
Programın şunları yapmalıdır:
std::map<std::string, std::string>adlı bircontactsoluştur- İlk kişi sayısını oku ve haritayı kişi adları ile telefon numaralarıyla doldur
- Aşağıda gösterilen biçimde başlangıç kişi rehberini yazdır
- Kaldırılacak kişi sayısını oku
- Kaldırılacak her kişi adı için, bu kişiyi haritadan kaldırmak üzere
.erase()yöntemini kullan - Tüm kaldırma işlemlerinden sonra güncellenmiş kişi rehberini yazdır
Aşağıdaki kesin çıktı biçimini kullan:
Başlangıç rehberi:
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Kaldırma işlemlerinden sonraki güncellenmiş rehber:
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Tüm kaldırma işlemlerinden sonra rehber boşalırsa şunu yazdır:
Updated Contact Directory:
Directory is emptyKişiler, harita üzerinde yineleme yapılırken göründükleri sırayla (kişi adına göre alfabetik sırada) yazdırılmalıdır. Harita üzerinde her iki seferde de yineleme yapmak için aralık tabanlı bir for döngüsü kullan ve her anahtar-değer çiftine kişi adı için pair.first, telefon numarası için pair.second ile eriş. Var olmayan bir kişiyi silmeye çalışmanın hataya neden olmayacağını unutma; harita değişmeden kalır.
Kendin dene
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Read number of initial contacts
int n;
cin >> n;
// contacts haritasını oluştur
map<string, string> contacts;
// Read initial contacts
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Kişiyi map'e ekle
}
// İlk dizini yazdır
cout << "Initial Contact Directory:" << endl;
// TODO: range-based for döngüsü kullanarak tüm kişileri yazdır
// Kaldırılacak kişi sayısını oku
int m;
cin >> m;
// Kişileri kaldır
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// TODO: .erase() metodunu kullanarak kişiyi kaldır
}
// Güncellenmiş dizini yazdır
cout << "Updated Contact Directory:" << endl;
// TODO: Print remaining contacts or "Directory is empty" if empty
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev EklemeKendi başına pratik yap: Online C++ derleyicisi