Menu
Coddy logo textTech

Anahtar Kontrolü

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 26 / 56.

Köşeli parantez operatörü map değerlerine erişmek için kullanışlı olsa da, potansiyel bir sorun vardır: Var olmayan bir anahtara erişmeye çalışırsanız ne olur? Önceki derste öğrendiğiniz gibi, var olmayan bir anahtarla [] kullanmak, o anahtarı otomatik olarak varsayılan bir değerle oluşturur.

Bazen bir anahtara erişmeden önce, yanlışlıkla yeni girişler oluşturmadan, anahtarın var olup olmadığını kontrol etmek istersiniz. İşte bu noktada .count() yöntemi kullanışlı hale gelir. Size belirli bir anahtarın haritada bulunup bulunmadığını söyler.

.count() metodu, anahtar mevcutsa 1, mevcut değilse 0 döndürür:

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

Bu yaklaşım, bir anahtarın varlığını güvenli bir şekilde kontrol etmenizi ve her iki durumu da uygun şekilde ele almanızı sağlayarak haritanızda istenmeyen girişlerin oluşturulmasını önler.

challenge icon

Görev

Kolay

Bir std::map kullanarak kütüphane kitap ödünç verme sistemini yöneten bir program oluşturun. Programınız hangi kitapların mevcut olduğunu takip edecek ve bilgilerine erişmeye çalışmadan önce kitapların var olup olmadığını güvenli bir şekilde kontrol etmek için .count() metodunu kullanacaktır.

Aşağıdaki girdiler sağlanacaktır:

  • Kütüphanedeki kitap sayısını temsil eden bir tam sayı n
  • Ardından n çift girdi:
    • Kitap başlığını temsil eden bir dize (string)
    • Mevcut kopya sayısını temsil eden bir tam sayı
  • Kontrol edilecek kitap talebi sayısını temsil eden bir tam sayı m
  • Ardından aranacak kitap başlıklarını temsil eden m tane dize (string)

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

  1. library adında bir std::map<std::string, int> oluşturun
  2. Kitap sayısını okuyun ve map'i kitap başlıkları ve mevcut kopya sayıları ile doldurun
  3. Kitap talebi sayısını okuyun
  4. Her kitap talebi için, kitabın kütüphanede olup olmadığını kontrol etmek için .count() metodunu kullanın
  5. Kitabın bulunup bulunmadığına bağlı olarak uygun mesajı yazdırın

Aşağıdaki tam çıktı formatını kullanın:

Her kitap talebi için:

  • Kitap mevcutsa: Book "[book title]" is available with [number] copies
  • Kitap mevcut değilse: Book "[book title]" is not available in the library

Değerine erişmeden önce kitabın varlığını kontrol etmek için bir if-ifadesi içinde .count() metodunu kullanın. Eğer library.count(bookTitle) 1 döndürürse, kitap mevcuttur ve kopya sayısını almak için library[bookTitle] ifadesine güvenle erişebilirsiniz. Eğer 0 döndürürse, kitap kütüphanede mevcut değildir.

Kopya kağıdı

.count() yöntemi, yeni girişler oluşturmadan bir anahtarın map içinde var olup olmadığını kontrol eder. Anahtar mevcutsa 1, mevcut değilse 0 değerini döndürür:

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

Bu, varsayılan değerlerle otomatik olarak anahtarlar oluşturan köşeli parantez operatörü [] kullanımının aksine, anahtar varlığını kontrol ederken yanlışlıkla istenmeyen girişlerin oluşturulmasını önler.

Kendin dene

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // Kitap sayısını oku
    int n;
    cin >> n;
    
    // Kütüphane haritasını oluştur
    map<string, int> library;
    
    // Kitap bilgilerini oku ve haritayı doldur
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Kitap isteklerinin sayısını oku
    int m;
    cin >> m;
    
    // TODO: Kodunuzu aşağıya yazın
    // .count() metodunu kullanarak her kitap isteğini işle
    // Kitabın mevcut olup olmadığını kontrol et ve uygun mesajı 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