容器的查找

题目描述

编写 includes 函数或模板,使其返回布尔值,指明某个容器是否包含某元素。

关于输入

第一至三行:空格分隔的字符串和整数。它们将插入到一个映射(map/字典)中。

第四行:五个整数。它们将插入到 vector 中。

第五行:五个整数。它们将插入到数组中。

第六行:字符串 s1。

第七行:整数 v2。

第八行:整数 v3。

关于输出

第一行:若映射中存在字符串 s1,则输出其对应的值;否则输出 None。

第二行:true/false,指明 vector 中是否存在 v2。

第三行:true/false,指明数组中是否存在 v3。

参考答案

#include <array>
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <algorithm>

template <typename C, typename V>
bool includes(const C& c, const V& v) {
    return std::find(c.begin(), c.end(), v) != c.end();
}

template <typename K, typename V>
bool includes(const std::unordered_map<K, V>& c, const K& key){
    return c.find(key) != c.end();
}

int main() {
    std::string k;
    int v;
    std::unordered_map<std::string, int> map;
    for (int i{0}; i < 3; i++) {
        std::cin >> k >> v;
        map.insert({k, v});
    }

    std::vector<int> vec;
    for (int i{0}; i < 5; i++) {
        std::cin >> v;
        vec.push_back(v);
    }

    std::array<int, 5> arr;
    for (int i{0}; i < 5; i++) {
        std::cin >> v;
        arr[i] = v;
    }

    std::cin >> k;
    if (includes(map, k)) {
        std::cout << map[k] << std::endl;
    } else {
        std::cout << "None" << std::endl;
    }
    std::cin >> v;
    std::cout << std::boolalpha << includes(vec, v) << std::endl;
    std::cin >> v;
    std::cout << std::boolalpha << includes(arr, v) << std::endl;
}