Bir Map Oluşturma
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 24 / 56.
Artık bir map'in ne olduğunu anladığınıza göre, nasıl oluşturulacağını ve ona anahtar-değer çiftlerinin nasıl ekleneceğini öğrenelim. Bir std::map tanımlarken, açılı ayraçlar kullanarak hem anahtar türünü hem de değer türünü belirtmeniz gerekir.
Bir map oluşturmak için temel sözdizimi şöyledir:
std::map<KeyType, ValueType> mapName;Örneğin, öğrenci isimlerini anahtar ve test puanlarını değer olarak saklayan bir map oluşturmak için:
std::map<std::string, int> studentScores;Map'inize öğe eklemek için anahtar ile köşeli parantez gösterimini kullanabilir ve ardından bir değer atayabilirsiniz:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Bu, map içerisinde üç anahtar-değer çifti oluşturur. Her öğrencinin adı, ilgili puanını hızlıca almanızı sağlayan anahtar görevi görür.
Bir map içindeki tüm girdiler üzerinde yineleme yapmak için, auto ile birlikte aralık tabanlı bir for döngüsü (range-based for loop) kullanın. Bir std::map içindeki her öğe bir anahtar-değer çiftidir, bu nedenle anahtara .first ve değere .second ile erişirsiniz:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Burada, auto her öğenin türünü otomatik olarak çıkarır, pair.first anahtarı (öğrenci adı) verir ve pair.second değeri (puan) verir. std::map'in her zaman anahtara göre sıralı düzende yineleme yaptığını unutmayın.
Görev
KolayBir std::map kullanarak bir öğrenci not takip sistemi oluşturan bir program yazın. Programınız öğrenci isimlerini anahtar (key) ve test puanlarını değer (value) olarak saklayacaktır.
Aşağıdaki girdiler sağlanacaktır:
- Öğrenci sayısını temsil eden bir tam sayı
n - Ardından
nçift girdi:- Öğrencinin adını temsil eden bir dize (string)
- Öğrencinin puanını temsil eden bir tam sayı
Programınız şunları yapmalıdır:
gradesadında birstd::map<std::string, int>oluşturun- Öğrenci sayısını okuyun
- Her öğrenci için adını ve puanını okuyun, ardından köşeli parantez notasyonunu kullanarak bunları map'e ekleyin
- Tüm öğrencileri ekledikten sonra, her öğrencinin bilgisini aşağıda gösterilen formatta yazdırın
- Map içinde saklanan toplam öğrenci sayısını hesaplayın ve yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]Öğrenciler, map üzerinde döngü kurulduğunda göründükleri sırayla yazdırılmalıdır (map'ler anahtara göre otomatik olarak sıralandığı için bu alfabetik sıra olacaktır). Map üzerinde gezinmek için aralık tabanlı (range-based) bir for döngüsü kullanın, her bir anahtar-değer çiftine erişin ve öğrenci adını ve ardından puanını yazdırın.
Kopya kağıdı
Bir std::map oluşturmak için, anahtar ve değer türlerini açılı ayraçlar içinde belirtin:
std::map<KeyType, ValueType> mapName;Dize anahtarlar ve tam sayı değerler içeren örnek:
std::map<std::string, int> studentScores;Köşeli ayraç notasyonunu kullanarak öğe ekleyin:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Aralık tabanlı bir for döngüsü kullanarak bir map üzerinde gezinin. Her öğe bir çifttir — anahtara erişmek için .first ve değere erişmek için .second kullanın:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}auto her öğenin türünü otomatik olarak çıkarır ve const auto& gereksiz kopyalamayı önler.
Kendin dene
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Öğrenci sayısını oku
int n;
cin >> n;
// Notları saklamak için map oluştur
map<string, int> grades;
// TODO: Kodunuzu buraya yazın
// Her öğrencinin adını ve puanını oku, ardından map'e ekle
// Sonuçları yazdır
cout << "Student Grades:" << endl;
// TODO: Her öğrencinin notunu yazdırmak için aralık tabanlı bir for döngüsü kullanın
// Toplam öğrenci sayısını yazdır
cout << "Total students: " << grades.size() << endl;
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