Menu
CoddyTech

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.

challenge icon

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 n biểu thị số học sinh
  • Sau đó là n cặ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:

  1. Tạo một std::map<std::string, int> có tên là grades
  2. Đọc số học sinh
  3. 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
  4. 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
  5. 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;
}
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