词典~2021.1.11

输入格式

输入第一行是正整数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。

猜你喜欢

转载自blog.csdn.net/fatfairyyy/article/details/112481888
今日推荐