Menu
CoddyTech

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.

challenge icon

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 n biểu thị số cặp khóa-giá trị cần thêm vào map
  • Tiếp theo là n cặp đầu vào, mỗi cặp gồm:
    • Một chuỗi key biểu thị khóa
    • Một số nguyên value biểu thị giá trị
  • Một số nguyên targetValue biểu thị giá trị cần tìm

Chương trình của bạn cần:

  1. Tạo hàm tên là findKeysWithValue, nhận một std::map<std::string, int> và một số nguyên làm tham số
  2. Hàm trả về một std::vector<std::string> chứa tất cả khóa có giá trị được chỉ định
  3. 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 đó
  4. Gọi hàm findKeysWithValue với map và giá trị cần tìm
  5. 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: 0

Hã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

Tự luyện tập: Trình biên dịch C++ online