Menu
CoddyTech

Kiểm tra khóa

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 26 trên 56.

Mặc dù toán tử dấu ngoặc vuông rất tiện để truy cập các giá trị trong từ điển, nhưng có một vấn đề có thể xảy ra: điều gì sẽ xảy ra nếu bạn thử truy cập một khóa không tồn tại? Như bạn đã học ở bài học trước, dùng [] với một khóa không tồn tại sẽ tự động tạo khóa đó với giá trị mặc định.

Đôi khi, bạn muốn kiểm tra xem một khóa có tồn tại trước khi truy cập hay không, mà không vô tình tạo mục mới. Lúc này, phương thức .count() rất hữu ích. Phương thức này cho bạn biết một khóa cụ thể có trong map hay không.

Phương thức .count() trả về 1 nếu khóa tồn tại và 0 nếu không:

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

Cách này giúp bạn kiểm tra an toàn xem một khóa (key) có tồn tại hay không và xử lý phù hợp cả hai trường hợp, tránh tạo các mục không mong muốn trong map.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống mượn sách thư viện bằng std::map. Chương trình sẽ theo dõi những cuốn sách nào hiện có và dùng phương thức (method) .count() để kiểm tra an toàn xem sách có tồn tại trước khi truy cập thông tin của sách hay không.

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

  • Một số nguyên (integer) n biểu thị số lượng sách trong thư viện
  • Sau đó là n cặp đầu vào:
    • Một chuỗi (string) biểu thị tên sách
    • Một số nguyên biểu thị số bản sách hiện có
  • Một số nguyên m biểu thị số lượt yêu cầu kiểm tra sách
  • Sau đó là m chuỗi biểu thị tên những cuốn sách cần tìm

Chương trình cần:

  1. Tạo một std::map<std::string, int> có tên library
  2. Đọc số lượng sách và điền tên sách cùng số bản hiện có vào map
  3. Đọc số lượt yêu cầu kiểm tra sách
  4. Với mỗi lượt yêu cầu, dùng phương thức .count() để kiểm tra xem sách có trong thư viện hay không
  5. In thông báo phù hợp tùy theo việc có tìm thấy sách hay không

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

Với mỗi lượt yêu cầu kiểm tra sách:

  • Nếu sách tồn tại: Book "[book title]" is available with [number] copies
  • Nếu sách không tồn tại: Book "[book title]" is not available in the library

Dùng phương thức .count() trong câu lệnh if để kiểm tra xem sách có tồn tại hay không trước khi truy cập giá trị của sách. Nếu library.count(bookTitle) trả về 1, sách tồn tại và bạn có thể truy cập an toàn library[bookTitle] để lấy số bản. Nếu phương thức trả về 0, sách không tồn tại trong thư viện.

Tự làm thử

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

int main() {
    // Đọc số lượng sách
    int n;
    cin >> n;
    
    // Tạo map thư viện
    map<string, int> library;
    
    // Đọc thông tin sách và thêm vào map
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Đọc số lượng yêu cầu tìm sách
    int m;
    cin >> m;
    
    // TODO: Viết code bên dưới
    // Xử lý từng yêu cầu tìm sách bằng phương thức (method) .count()
    // Kiểm tra sách có tồn tại không và in ra thông báo phù hợp
    
    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