输入格式
输入第一行是正整数N和M,后面是N行字典条目(最多10000条),然后是M行要翻译的外语单词(最多10000个)。每一个字典条目都包含一个英语单词,后面跟着一个空格和一个外语单词。 输入中的每个单词都由最多10个小写字母组成。
输出格式
输出翻译后的英文单词,每行一个单词。非词典中的外来词汇输出“eh”。
输入样例
5 3
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
输出样例
cat
eh
loops
AC代码
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string,string> m;
int main()
{
int p,q;
cin>>p>>q;
string s1,s2,sf;
while(p --){
cin>>s1>>s2;
m.insert(pair<string,string>(s2,s1));
}
map<string,string>::iterator iter;
while(q --){
cin>>sf;
iter = m.find(sf);
if(iter !=m.end()){
cout<<iter->second<<endl;
}
else{
cout<<"eh"<<endl;
}
}
return 0;
}
解释
①遇到词典问题下意识地想到使用hashmap,在c++中对应着使用map容器,需要引入map头文件。由于本人初次使用map,以下仅使用通俗语言就题论题讲解,有纰漏之处还望读者海涵。
②建立map对象
map<string,string> m;
map在C++中的格式为map<key,value> x;
,其中key为关键词,value为关键词的映射,x为map容器的名称。
③输入
while(p --){
cin>>s1>>s2;
m.insert(pair<string,string>(s2,s1));
}
使用map容器自带的insert方法将一组映射关系插入到map中。
④建立迭代器变量
建立一个迭代器变量,格式如下map<string,string>::iterator iter;
,其目的是在一会儿的查找过程中起到判断查找是否成功的作用。
⑤查找
while(q --){
cin>>sf;
iter = m.find(sf);
if(iter !=m.end()){
cout<<iter->second<<endl;
}
else{
cout<<"eh"<<endl;
}
}
1)iter = m.find(sf);
find函数返回的位置是传入key对应的映射关系在map中的位置,这个位置保存在迭代器变量中。
2)iter !=m.end()
如果查找不成功,则find函数返回迭代器的末尾,即m.end()
,因此这个条件判断的是查找是否成功。
⑥AC。