Tạo á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 24 trên 56.
Giờ bạn đã hiểu map là gì, hãy cùng tìm hiểu cách tạo map và thêm các cặp khóa-giá trị vào đó. Khi khai báo std::map, bạn cần chỉ định cả kiểu khóa và kiểu giá trị bằng dấu ngoặc nhọn.
Đây là cú pháp cơ bản để tạo một map:
std::map<KeyType, ValueType> mapName;Ví dụ, để tạo một bản đồ lưu tên học sinh làm khóa và điểm kiểm tra của các em làm giá trị:
std::map<std::string, int> studentScores;Để thêm phần tử vào bản đồ, bạn có thể dùng ký pháp dấu ngoặc vuông với khóa, rồi gán một giá trị:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Điều này tạo ra ba cặp khóa-giá trị trong ánh xạ (map). Tên của mỗi học sinh đóng vai trò là khóa, giúp bạn nhanh chóng tìm được điểm số tương ứng.
Để lặp qua tất cả phần tử trong một map, bạn có thể dùng vòng lặp for dựa trên phạm vi với auto. Mỗi phần tử trong std::map là một cặp khóa và giá trị, bạn có thể truy cập khóa bằng .first và giá trị bằng .second:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Ở đây, auto tự động suy ra kiểu dữ liệu của từng phần tử (một cặp khóa-giá trị), pair.first cho bạn khóa (tên học sinh), còn pair.second cho bạn giá trị (điểm số). Lưu ý rằng std::map tự động sắp xếp các phần tử theo khóa, vì vậy khi lặp qua map, chương trình sẽ in các mục theo thứ tự bảng chữ cái.
Thử thách
DễTạo một chương trình xây dựng hệ thống theo dõi điểm của học sinh bằng std::map. Chương trình sẽ lưu tên học sinh làm khóa và điểm kiểm tra làm giá trị.
Chương trình sẽ nhận các đầu vào sau:
- Một số nguyên
nbiểu thị số học sinh - Sau đó là
ncặp đầu vào:- Một chuỗi biểu thị tên học sinh
- Một số nguyên biểu thị điểm của học sinh
Chương trình của bạn cần:
- Tạo một
std::map<std::string, int>có tên làgrades - Đọc số học sinh
- Với mỗi học sinh, đọc tên và điểm của họ, sau đó thêm thông tin vào từ điển bằng ký hiệu dấu ngoặc vuông
- Sau khi thêm tất cả học sinh, in thông tin của từng học sinh theo định dạng bên dưới
- Tính và in tổng số học sinh được lưu trong từ điển
Dùng chính xác định dạng đầu ra sau:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]Học sinh sẽ được in theo thứ tự xuất hiện khi duyệt từ điển, tức là theo thứ tự bảng chữ cái vì từ điển tự động sắp xếp theo khóa. Dùng vòng lặp for dựa trên phạm vi để duyệt từ điển, truy cập từng cặp khóa và giá trị, rồi in tên học sinh theo sau là điểm của họ.
Tự làm thử
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Đọc số lượng học sinh
int n;
cin >> n;
// Tạo map để lưu điểm
map<string, int> grades;
// TODO: Viết code của bạn ở đây
// Đọc tên và điểm của từng học sinh, rồi thêm vào map
// In ra kết quả
cout << "Student Grades:" << endl;
// TODO: Dùng vòng lặp for theo phạm vi để in điểm của từng học sinh
// In ra tổng số học sinh
cout << "Total students: " << grades.size() << endl;
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