容器的查找
题目描述
编写 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;
}