这道题真的是用来练哈希表的无疑
但是这道题真的用哈希吗?
答案是:不用!
我们都学过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分
6 人评分
我和你的思路几乎一样,就一个超时,91分,不知为何QWQ #include<bits/stdc++.h> using namespace std; int main() { map<string,int>mp; int t; cin>>t; while(t--) { string s1,s2; cin>>s1; getline(cin,s2); if(s1=="add") { mp[s2]++; } else if(s1=="find") { if(mp.find(s2)==mp.end()) cout<<"no"<<endl; else cout<<"yes"<<endl; } } return 0; }
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1968 |
局部变量作函数返回值的问题浏览:1028 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1495 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:756 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:493 |
神奇的fans (C语言代码)浏览:1124 |
班级人数 (C语言代码)浏览:980 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:586 |
快速排序算法1浏览:996 |