Mengakses dan Mengubah Nilai
Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 25 dari 56.
Setelah memiliki map dengan pasangan key-value, kamu sering perlu mengambil atau memperbarui nilai yang tersimpan di dalamnya. Operator tanda kurung siku [] menyediakan cara praktis untuk mengakses nilai yang sudah ada maupun mengubahnya.
Untuk mengakses nilai, cukup gunakan kunci di dalam tanda kurung siku:
std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // Mengambil 95Sintaks yang sama berfungsi untuk memperbarui nilai yang sudah ada:
scores["Alice"] = 98; // Memperbarui skor Alice menjadi 98Berikut perilaku penting yang perlu diingat: jika kamu menggunakan operator [] dengan kunci yang tidak ada di map, operator tersebut otomatis membuat elemen baru dengan kunci itu dan menginisialisasinya dengan nilai default (0 untuk bilangan bulat, string kosong untuk string, dan sebagainya).
int bobScore = scores["Bob"]; // Membuat "Bob" dengan nilai 0Fitur pembuatan otomatis ini membuat operator [] sangat praktis untuk membaca dan menulis data map, karena kamu tidak perlu memeriksa apakah sebuah kunci tersedia sebelum menggunakannya.
Kamu juga dapat melakukan iterasi pada semua pasangan kunci-nilai dalam map menggunakan for loop berbasis rentang. Setiap elemen dalam map adalah sebuah pasangan, dengan pair.first menyimpan kunci dan pair.second menyimpan nilainya:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Ini akan mencetak setiap pasangan kunci-nilai yang disimpan dalam map, satu pasangan per baris.
Tantangan
MudahBuat program yang mengelola sistem inventaris produk menggunakan std::map. Programmu akan mencatat nama produk dan jumlah stoknya saat ini, sehingga kamu dapat mengakses dan memperbarui tingkat inventaris.
Input berikut akan diberikan:
- Bilangan bulat
nyang menunjukkan jumlah produk awal - Kemudian
npasang input:- String yang menunjukkan nama produk
- Bilangan bulat yang menunjukkan jumlah stok awal
- String yang menunjukkan nama produk yang akan diperbarui
- Bilangan bulat yang menunjukkan jumlah stok baru untuk produk tersebut
Programmu harus:
- Membuat
std::map<std::string, int>bernamainventory - Membaca jumlah produk awal
- Untuk setiap produk, membaca nama dan jumlah stok, lalu menambahkannya ke map menggunakan notasi tanda kurung siku
- Mencetak inventaris awal dengan format yang ditunjukkan di bawah
- Membaca nama produk dan jumlah baru untuk diperbarui
- Menggunakan operator tanda kurung siku untuk memperbarui jumlah stok produk yang ditentukan
- Mencetak inventaris yang telah diperbarui dengan menampilkan tingkat stok yang telah diubah
Gunakan format output berikut secara persis:
Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...Produk harus dicetak sesuai urutannya saat melakukan iterasi melalui map, yaitu berdasarkan urutan alfabet nama produk. Gunakan for loop berbasis rentang untuk melakukan iterasi melalui map sebanyak dua kali, dengan mengakses setiap pasangan key-value menggunakan pair.first untuk nama produk dan pair.second untuk jumlah stok. Jika nama produk yang akan diperbarui tidak ada di map, operator tanda kurung siku akan otomatis membuat entri baru dengan nama tersebut dan jumlah stok yang ditentukan.
Coba sendiri
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Baca jumlah produk awal
int n;
cin >> n;
// Buat map inventaris
map<string, int> inventory;
// Baca produk awal dan jumlahnya
for (int i = 0; i < n; i++) {
string product;
int quantity;
cin >> product >> quantity;
// TODO: Tambahkan produk ke map inventaris
}
// TODO: Tampilkan inventaris awal
// Baca produk yang akan diperbarui dan jumlah barunya
string updateProduct;
int newQuantity;
cin >> updateProduct >> newQuantity;
// TODO: Perbarui jumlah produk di map
// TODO: Tampilkan inventaris yang telah diperbarui
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Pointer dan Memori
Apa Itu Pointer?Operator Address-OfOperator DereferencePointer NullPointer dan ArrayMemori Dinamis dengan 'new'Membebaskan Memori dengan 'delete'Rangkuman: Latihan Pointer4Map (Pasangan Kunci-Nilai)
Mengenal std::mapMembuat MapMengakses dan Mengubah NilaiMemeriksa KunciMenghapus PasanganMelakukan Perulangan pada MapRangkuman: Frekuensi Kata2Vektor (array Dinamis)
Memperkenalkan std::vectorMembuat VektorMenambahkan ElemenMengakses ElemenUkuran VektorIterasi dengan for loopFor loop Berbasis RentangMenghapus ElemenRangkuman: Operasi VektorLatihan sendiri: Compiler C++ online