Menu
Coddy logo textTech

Ç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ır

erase("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.

challenge icon

Görev

Kolay

std::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 n tamsayısı
  • Ardından n adet 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 m tamsayısı
  • Ardından kaldırılacak kişi adlarını temsil eden m dize

Programın şunları yapmalıdır:

  1. std::map<std::string, std::string> adlı bir contacts oluştur
  2. İlk kişi sayısını oku ve haritayı kişi adları ile telefon numaralarıyla doldur
  3. Aşağıda gösterilen biçimde başlangıç kişi rehberini yazdır
  4. Kaldırılacak kişi sayısını oku
  5. Kaldırılacak her kişi adı için, bu kişiyi haritadan kaldırmak üzere .erase() yöntemini kullan
  6. 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 empty

Kiş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;
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C++ derleyicisi