Map Üzerinde Yineleme
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 28 / 56.
Bir map'ten öğe oluşturmayı, değiştirmeyi ve kaldırmayı öğrendiğinize göre, şimdi map'inizdeki tüm anahtar-değer çiftlerinin üzerinden nasıl geçeceğinizi öğrenelim. Aralığa dayalı (range-based) for döngüsü, bir std::map içindeki her öğe üzerinde yineleme yapmak için zarif bir yol sunar.
Bir map üzerinde yineleme yapmak için temel sözdizimi şöyledir:
for (auto pair : myMap) {
// Anahtara pair.first ile erişin
// Değere pair.second ile erişin
}Döngüdeki her bir öğe, iki önemli üye içeren bir pair nesnesidir: first anahtarı tutar ve second değeri tutar. İşte pratik bir örnek:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Bu, her öğrencinin adını ve ardından puanını yazdıracaktır. auto anahtar kelimesi, her çift için doğru türü otomatik olarak belirleyerek kodunuzu daha temiz ve okunması daha kolay hale getirir.
Görev
KolayBir std::map kullanarak bir restoran menü sistemini yöneten bir program oluşturun. Programınız menü öğelerini ve fiyatlarını saklayacak, ardından tüm anahtar-değer çiftleri arasında gezinerek tam menüyü görüntüleyecektir.
Aşağıdaki girdiler sağlanacaktır:
- Menü öğelerinin sayısını temsil eden bir tam sayı
n - Ardından
nçift girdi:- Yemek adını temsil eden bir dize (string)
- Yemeğin fiyatını temsil eden bir double
Programınız şunları yapmalıdır:
menuadında birstd::map<std::string, double>oluşturun- Menü öğelerinin sayısını okuyun
- Her menü öğesi için yemek adını ve fiyatını okuyun, ardından bunları köşeli parantez notasyonunu kullanarak haritaya (map) ekleyin
- Tüm harita üzerinde gezinmek ve her yemeği fiyatıyla birlikte yazdırmak için aralık tabanlı (range-based) bir for döngüsü kullanın
- Menüdeki toplam öğe sayısını hesaplayın ve yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]Menü öğeleri, harita üzerinde gezinirken göründükleri sırada (yemek adına göre alfabetik sıra) yazdırılmalıdır. Harita üzerinde gezinmek için auto pair : menu ile aralık tabanlı bir for döngüsü kullanın; yemek adı için pair.first ve fiyat için pair.second ile her bir anahtar-değer çiftine erişin. Her fiyatı std::fixed ve std::setprecision(2) kullanarak tam olarak 2 ondalık basamakla yazdırın.
Kopya kağıdı
Bir std::map içindeki tüm anahtar-değer çiftleri üzerinde gezinmek için aralık tabanlı (range-based) bir for döngüsü kullanın:
for (auto pair : myMap) {
// pair.first ile anahtara erişin
// pair.second ile değere erişin
}Her öğe, first kısmının anahtarı ve second kısmının değeri tuttuğu bir pair nesnesidir:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}auto anahtar kelimesi, her bir çift için doğru türü otomatik olarak belirler.
Kendin dene
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
int main() {
// Menü öğelerinin sayısını oku
int n;
cin >> n;
// Menü haritasını (map) oluştur
map<string, double> menu;
// Menü öğelerini ve fiyatlarını oku
for (int i = 0; i < n; i++) {
string dish;
double price;
cin >> dish >> price;
// TODO: Yemeği ve fiyatı menü haritasına ekle
}
// TODO: "Restaurant Menu:" başlığını yazdır
// TODO: Menüde gezinmek ve her bir öğeyi yazdırmak için aralık tabanlı for döngüsü kullan
// Format: [dish]: $[price] (2 ondalık basamak ile)
// TODO: Toplam menü öğesi sayısını 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