Tìm kiếm giá trị trong map
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 55 trên 56.
Thử thách
DễTạo chương trình triển khai hệ thống tra cứu ngược để tìm tất cả khóa gắn với một giá trị cụ thể trong map. Thử thách này sẽ kiểm tra khả năng kết hợp việc duyệt map, so sánh giá trị và tạo vector để tìm kiếm các cặp khóa-giá trị một cách hiệu quả.
Chương trình sẽ nhận các đầu vào sau:
- Một số nguyên
nbiểu thị số cặp khóa-giá trị cần thêm vào map - Tiếp theo là
ncặp đầu vào, mỗi cặp gồm:- Một chuỗi
keybiểu thị khóa - Một số nguyên
valuebiểu thị giá trị
- Một chuỗi
- Một số nguyên
targetValuebiểu thị giá trị cần tìm
Chương trình của bạn cần:
- Tạo hàm tên là
findKeysWithValue, nhận mộtstd::map<std::string, int>và một số nguyên làm tham số - Hàm trả về một
std::vector<std::string>chứa tất cả khóa có giá trị được chỉ định - Trong hàm main, tạo một map và thêm các cặp khóa-giá trị đầu vào vào map đó
- Gọi hàm
findKeysWithValuevới map và giá trị cần tìm - In số lượng khóa khớp trước, sau đó in từng khóa khớp trên một dòng riêng
Dùng đúng định dạng đầu ra sau:
Dòng đầu tiên, số lượng khóa khớp:
Keys found: [number_of_matching_keys]Sau đó in từng khóa khớp trên một dòng riêng:
[matching_key_1]
[matching_key_2]
...Nếu không có khóa nào có giá trị cần tìm, chỉ in:
Keys found: 0Hãy nhớ rằng hàm findKeysWithValue cần tạo một vector mới rỗng, duyệt map bằng vòng lặp for dựa trên phạm vi, rồi dùng câu lệnh if để kiểm tra giá trị của từng cặp so với giá trị cần tìm. Khi tìm thấy kết quả khớp, thêm khóa (truy cập bằng pair.first) vào vector kết quả bằng push_back(). Hàm cần trả về vector chứa tất cả khóa khớp.
Tự làm thử
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
// TODO: Viết hàm (function) findKeysWithValue tại đây
int main() {
// Đọc số lượng cặp khóa và giá trị
int n;
cin >> n;
// Tạo map để lưu các cặp khóa và giá trị
map<string, int> keyValueMap;
// Đọc n cặp khóa và giá trị
for (int i = 0; i < n; i++) {
string key;
int value;
cin >> key >> value;
keyValueMap[key] = value;
}
// Đọc giá trị cần tìm
int targetValue;
cin >> targetValue;
// TODO: Gọi hàm findKeysWithValue và lưu kết quả
// TODO: In kết quả theo định dạng yêu cầu
// Trước tiên, in "Keys found: [count]"
// Sau đó, in mỗi khóa khớp trên một dòng riêng
return 0;
}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ỏ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