Menu
CoddyTech

Duyệt qua ánh xạ

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 28 trên 56.

Bây giờ bạn đã biết cách tạo, sửa đổi và xóa phần tử trong map, hãy cùng tìm hiểu cách duyệt qua tất cả các cặp khóa-giá trị trong map. Vòng lặp for dựa trên phạm vi cung cấp một cách tinh tế để duyệt qua từng phần tử trong std::map.

Đây là cú pháp cơ bản để duyệt qua một ánh xạ (map):

for (auto pair : myMap) {
    // Truy cập khóa (key) bằng pair.first
    // Truy cập giá trị (value) bằng pair.second
}

Mỗi phần tử trong vòng lặp là một đối tượng cặp chứa hai thành phần quan trọng: first giữ khóa, còn second giữ giá trị. Đây là một ví dụ thực tế:

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;
}

Lệnh này sẽ in ra tên của từng học viên, theo sau là điểm số của họ. Từ khóa (keyword) auto tự động xác định kiểu dữ liệu phù hợp cho từng cặp, giúp code của bạn gọn gàng và dễ đọc hơn.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý thực đơn nhà hàng bằng std::map. Chương trình sẽ lưu các món ăn và giá của chúng, sau đó hiển thị toàn bộ thực đơn bằng cách lặp qua tất cả các cặp khóa và giá trị.

Chương trình sẽ nhận các đầu vào sau:

  • Một số nguyên n biểu thị số món ăn trong thực đơn
  • Sau đó là n cặp đầu vào:
    • Một chuỗi biểu thị tên món ăn
    • Một số thực kiểu double biểu thị giá của món ăn

Chương trình cần:

  1. Tạo một std::map<std::string, double> có tên menu
  2. Đọc số món ăn trong thực đơn
  3. Với mỗi món ăn, đọc tên món và giá, sau đó thêm chúng vào từ điển bằng ký hiệu ngoặc vuông
  4. Dùng vòng lặp for dựa trên phạm vi để lặp qua toàn bộ từ điển và in từng món cùng giá của món đó
  5. Tính và in tổng số món trong thực đơn

Dùng chính xác định dạng đầu ra sau:

Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]

Các món ăn cần được in theo thứ tự xuất hiện khi lặp qua từ điển, tức là theo thứ tự bảng chữ cái của tên món. Dùng vòng lặp for dựa trên phạm vi với auto pair : menu để lặp qua từ điển, truy cập từng cặp khóa và giá trị bằng pair.first để lấy tên món và pair.second để lấy giá. In mỗi giá với chính xác 2 chữ số thập phân bằng std::fixed và std::setprecision(2).

Tự làm thử

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

int main() {
    // Đọc số lượng món trong thực đơn
    int n;
    cin >> n;
    
    // Tạo map menu
    map<string, double> menu;
    
    // Đọc các món và giá tiền
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Thêm món và giá vào map menu
    }
    
    // TODO: In ra tiêu đề "Restaurant Menu:"
    
    // TODO: Dùng vòng lặp for theo phạm vi để duyệt menu và in ra từng món
    // Định dạng: [dish]: $[price] với 2 chữ số thập phân
    
    // TODO: In ra tổng số món trong thực đơn
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online