这道题真的是用来练哈希表的无疑
但是这道题真的用哈希吗?
答案是:不用!
我们都学过STL没学过去看一下,stack,queue,seet,map,这道题的书名还小于200:
正是启用map的好时机!
map:一种STL容器
它的具体操作有
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
那么这道题,
我们先定义一个map:
#include<map> map<string,int>m;
我们只需要将每一本书都用map存一下:
m[书名]=1;
寻找的时候查找一下:
if(m.find(书名)!=m.end())cout<<"yes"<<endl;//如果没有这个元素就会返回这个map的最后一个元素的下一个地址
然后我们可爱的程序就成型啦!
#include<iostream> #include<map> #include<string> using namespace std; int main(){ int n; char c[207]; string d; cin>>n; map<string,int>m; while(cin>>d){ if(d=="add"){ gets(c); m[c]=1; } if(d=="find"){ gets(c); if(m.find(c)!=m.end())cout<<"yes"<<endl; else cout<<"no"<<endl; } } return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复