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.
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
nbiểu thị số món ăn trong thực đơn - Sau đó là
ncặ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:
- Tạo một
std::map<std::string, double>có tênmenu - Đọc số món ăn trong thực đơn
- 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
- 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 đó
- 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;
}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
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ4Ánh xạ (cặp khóa-giá trị)
Giới thiệu std::mapTạo ánh xạTruy cập và chỉnh sửa giá trịKiểm tra khóaXóa các cặpDuyệt qua ánh xạÔn tập: tần suất từ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online