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.
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)
nbiểu thị số lượng sách trong thư viện - Sau đó là
ncặ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
mbiểu thị số lượt yêu cầu kiểm tra sách - Sau đó là
mchuỗi biểu thị tên những cuốn sách cần tìm
Chương trình cần:
- Tạo một
std::map<std::string, int>có tênlibrary - Đọc số lượng sách và điền tên sách cùng số bản hiện có vào map
- Đọc số lượt yêu cầu kiểm tra sách
- 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 - 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;
}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