Menu
Coddy logo textTech

Değerlere Erişme ve Değiştirme

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

Anahtar-değer çiftlerine sahip bir eşlemeniz (map) olduğunda, genellikle içinde saklanan değerleri almanız veya güncellemeniz gerekecektir. Köşeli parantez [] operatörü, hem mevcut değerlere erişmek hem de onları değiştirmek için kullanışlı bir yol sağlar.

Bir değere erişmek için anahtarı köşeli parantez içinde kullanmanız yeterlidir:

std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // 95 değerini alır

Aynı sözdizimi mevcut değerleri güncellemek için de çalışır:

scores["Alice"] = 98; // Alice'in puanını 98 olarak günceller

Hatırlanması gereken önemli bir davranış şudur: Eğer map içerisinde mevcut olmayan bir anahtarla [] operatörünü kullanırsanız, otomatik olarak bu anahtarla yeni bir öğe oluşturur ve onu varsayılan bir değerle (integer'lar için 0, string'ler için boş string vb.) başlatır.

int bobScore = scores["Bob"]; // 0 değeriyle "Bob" oluşturur

Bu otomatik oluşturma özelliği, bir anahtarı kullanmadan önce var olup olmadığını kontrol etmeniz gerekmediği için [] operatörünü hem eşleme (map) verilerini okumak hem de yazmak için oldukça kullanışlı hale getirir.

Bir map içindeki tüm anahtar-değer çiftleri üzerinde aralık tabanlı (range-based) bir for döngüsü kullanarak da gezinebilirsiniz. Map içindeki her bir öğe bir pair'dir (çift); burada pair.first anahtarı, pair.second ise değeri tutar:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Bu, map içinde saklanan her bir anahtar-değer çiftini her satıra bir tane gelecek şekilde yazdıracaktır.

challenge icon

Görev

Kolay

Bir std::map kullanarak ürün envanter sistemini yöneten bir program oluşturun. Programınız, ürün adlarını ve mevcut stok miktarlarını takip edecek, envanter seviyelerine erişmenize ve bunları güncellemenize olanak tanıyacaktır.

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

  • Başlangıçtaki ürün sayısını temsil eden bir tam sayı n
  • Ardından n çift girdi:
    • Ürün adını temsil eden bir dize (string)
    • Başlangıç stok miktarını temsil eden bir tam sayı
  • Güncellenecek bir ürün adını temsil eden bir dize (string)
  • O ürün için yeni stok miktarını temsil eden bir tam sayı

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

  1. inventory adında bir std::map<std::string, int> oluşturun
  2. Başlangıçtaki ürün sayısını okuyun
  3. Her ürün için adı ve stok miktarını okuyun, ardından köşeli parantez notasyonunu kullanarak bunları map'e ekleyin
  4. Başlangıç envanterini aşağıda gösterilen formatta yazdırın
  5. Güncellenecek ürün adını ve yeni miktarı okuyun
  6. Belirtilen ürünün stok miktarını güncellemek için köşeli parantez operatörünü kullanın
  7. Değiştirilen stok seviyesini gösteren güncellenmiş envanteri yazdırın

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

Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...

Ürünler, map üzerinde döngü oluşturulduğunda göründükleri sırayla (ürün adına göre alfabetik sıra) yazdırılmalıdır. Map üzerinde her iki seferde de gezinmek için aralık tabanlı bir for döngüsü (range-based for loop) kullanın; ürün adı için pair.first ve miktar için pair.second ile her bir anahtar-değer çiftine erişin. Güncellenecek ürün adı map'te mevcut değilse, köşeli parantez operatörü otomatik olarak o adla ve belirtilen miktarla yeni bir giriş oluşturacaktır.

Kendin dene

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

int main() {
    // Başlangıç ürün sayısını oku
    int n;
    cin >> n;
    
    // Envanter haritasını oluştur
    map<string, int> inventory;
    
    // Başlangıç ürünlerini ve miktarlarını oku
    for (int i = 0; i < n; i++) {
        string product;
        int quantity;
        cin >> product >> quantity;
        // YAPILACAK: Ürünü envanter haritasına ekle
    }
    
    // YAPILACAK: Başlangıç envanterini yazdır
    
    // Güncellenecek ürünü ve yeni miktarı oku
    string updateProduct;
    int newQuantity;
    cin >> updateProduct >> newQuantity;
    
    // YAPILACAK: Haritadaki ürün miktarını güncelle
    
    // YAPILACAK: Güncellenmiş envanteri 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