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.
Görev
KolayBir 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
mtane dize (string)
Programınız şunları yapmalıdır:
libraryadında birstd::map<std::string, int>oluşturun- Kitap sayısını okuyun ve map'i kitap başlıkları ve mevcut kopya sayıları ile doldurun
- Kitap talebi sayısını okuyun
- Her kitap talebi için, kitabın kütüphanede olup olmadığını kontrol etmek için
.count()metodunu kullanın - 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;
}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