map

输入格式
第一行,两个数 N,Q。表示有 N 个字符串和 Q 个询问。接下
来 N 行,每行一个字符串。每个字符串只包括数字和字母,区分大
小写。
再接下来 Q 行,每行一个字符串,表示此字符串是否出现在之
前的字符串中(需整个存在,即两字符串完全匹配),存在输出
“ Yes” ,不存在输出“ No”
输出格式
Q 行,每行一个 Yes 或 No
数据范围
60%:1<=N<=3,000;1<=Q<=5,000
100%:1<=N<=50,000;1<=Q<=5,000,000;1<=length_i<=30

这道题目有多重做法,可以用hash,今天介绍map的做法。

Map是STL[1] 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。——百度

用map就可以存储字符串,并映射关系。

map.begin()——返回map中第一个元素的迭代器
map.end()——返回map中最后一个元素的迭代器
map.size()——返回map中元素的个数
map.count(element)——若map中有元素element,返回1,否则返回0
map.clear——清空map
map.lower_bound()——返回值大于给定元素的第一个位置

此题用map,就可以存储每一个字符串
code:

#include<iostream>
#include<cstdio>
#include<map>
#include<string>
using namespace std;
int i,j,k,n,m,tot,ans,q;
map<string,int> ma;
int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s;ma[s]=1;
    }
    for(int i=1;i<=q;i++){
        string s;
        cin>>s;
        if(ma.count(s))/*这里也可以写为 if(ma[s])*/ printf("Yes
");
        else printf("N0
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/stevensonson/p/7612201.html