Ç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 ihtiyaç duyulmadığında anahtar-değer çiftlerini map'inizden kaldırmanız gerekir. .erase() yöntemi, kaldırmak istediğiniz anahtarı belirterek öğeleri silmek için basit bir yol sağlar.
Bir map'ten bir öğeyi kaldırmak için, anahtarı argüman olarak kullanarak .erase() metodunu çağırmanı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 silererase("Bob") çağrıldıktan sonra, map yalnızca Alice ve Carol'ın puanlarını içerecektir. Eğer map'te bulunmayan bir anahtarı silmeye çalışırsanız, işlem hiçbir şey yapmaz - herhangi bir hata oluşmaz.
Bu yöntem; temiz veri yapılarını korumak, güncelliğini yitirmiş bilgileri kaldırmak veya kullanıcıların uygulamanızdan girişleri silebileceği özellikleri uygulamak için özellikle yararlıdır.
Görev
KolayBir std::map kullanarak bir kişi dizinini yöneten bir program oluşturun. Programınız kişi adlarını ve telefon numaralarını saklayacak, ardından kullanıcıların .erase() yöntemini kullanarak dizinden belirli kişileri silmesine olanak tanıyacaktır.
Aşağıdaki girdiler sağlanacaktır:
- Başlangıçtaki kişi sayısını temsil eden bir tam sayı
n - Ardından
nçift girdi:- Kişi adını temsil eden bir dize (string)
- Telefon numarasını temsil eden bir dize (string)
- Silinecek kişi sayısını temsil eden bir tam sayı
m - Ardından silinecek kişi adlarını temsil eden
mtane dize (string)
Programınız şunları yapmalıdır:
contactsadında birstd::map<std::string, std::string>oluşturun- Başlangıçtaki kişi sayısını okuyun ve map'i kişi adları ve telefon numaralarıyla doldurun
- Başlangıçtaki kişi dizinini aşağıda gösterilen formatta yazdırın
- Silinecek kişi sayısını okuyun
- Silinecek her kişi adı için, onu map'ten kaldırmak üzere
.erase()yöntemini kullanın - Tüm silme işlemlerinden sonra güncellenmiş kişi dizinini yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Başlangıç dizini:
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Silme işlemlerinden sonraki güncellenmiş dizin:
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Tüm silme işlemlerinden sonra dizin boşalırsa şunu yazdırın:
Updated Contact Directory:
Directory is emptyKişiler, map üzerinde döngü kurulduğunda göründükleri sırayla (kişi adına göre alfabetik sıra) yazdırılmalıdır. Her iki seferde de map üzerinde gezinmek için aralık tabanlı (range-based) bir for döngüsü kullanın; kişi adı için pair.first ve telefon numarası için pair.second ile her anahtar-değer çiftine erişin. Mevcut olmayan bir kişiyi silmeye çalışmanın bir hataya neden olmayacağını, map'in değişmeden kalacağını unutmayın.
Kopya kağıdı
Bir map'ten öğeleri kaldırmak için, anahtar ile .erase() yöntemini kullanın:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores.erase("Bob"); // Bob'un girişini tamamen kaldırırEğer anahtar mevcut değilse, .erase() hiçbir şey yapmaz ve hata oluşmaz.
Kendin dene
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Başlangıç kişi sayısını oku
int n;
cin >> n;
// Kişiler haritasını oluştur
map<string, string> contacts;
// Başlangıç kişilerini oku
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// YAPILACAK: Kişiyi haritaya ekle
}
// Başlangıç dizinini yazdır
cout << "Initial Contact Directory:" << endl;
// YAPILACAK: Aralık tabanlı for döngüsü kullanarak tüm kişileri yazdır
// Silinecek kişi sayısını oku
int m;
cin >> m;
// Kişileri sil
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// YAPILACAK: .erase() metodunu kullanarak kişiyi sil
}
// Güncellenmiş dizini yazdır
cout << "Updated Contact Directory:" << endl;
// YAPILACAK: Kalan kişileri yazdır veya boşsa "Directory is empty" yazdır
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 Ekleme