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 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 siler

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

challenge icon

Görev

Kolay

Bir 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 m tane dize (string)

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

  1. contacts adında bir std::map<std::string, std::string> oluşturun
  2. Başlangıçtaki kişi sayısını okuyun ve map'i kişi adları ve telefon numaralarıyla doldurun
  3. Başlangıçtaki kişi dizinini aşağıda gösterilen formatta yazdırın
  4. Silinecek kişi sayısını okuyun
  5. Silinecek her kişi adı için, onu map'ten kaldırmak üzere .erase() yöntemini kullanın
  6. 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 empty

Kiş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ır

Eğ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;
}
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