题目描述: 给定 n 个人名和 m 个查询,每个查询给定一个人名,对于每个查询,输出该查询中给定的人名是否在之前给定的 n 个人名中出现过。 输入要求: 第一行为两个整数n(1 <= n <= 10000), m(1 <= m <= 1000),之后n行每行一个人名,之后m行每行一个人名,表示每次查询。人名为大小写字母组成,最大长度为100。 输出要求: 对于每个查询,输出一行,若该查询的人名出现过,输出YES,否则输出NO。 样例输入: 5 2 ZhangSan ZhangEr ZhangYi LiSi LiWu ZhangLiu LiWu 样例输出: NO YES 下面是代码,其中用到了map的一些特点和一些基本操作。
#include<iostream> #include<string> #include<map> using namespace std; int main() { map<string,int> mp; int n,m; string s; cin>>n>>m; for(int i=1;i<=n;++i) { cin>>s; mp.insert(make_pair(s,1)); //注意插入数据的方式,用pair< , >( , )和make_pair( , )都可以,但不能没有。 } for(int i=1;i<=m;++i) { cin>>s; if(mp[s]==1)//这里用了mp[]的特性,如果中括号里的关键词不存在,则会把关键词赋值给first,second的值默认为0. { cout<<"YES\n"; } else cout<<"NO\n"; } return 0; }