叶奇


私信TA

用户名:molingzhou

访问量:2736

签 名:

哈哈哈哈呵呵呵呵,我是或人

等  级
排  名 871
经  验 3576
参赛次数 17
文章发表 4
年  龄 15
在职情况 学生
学  校 乳山市府前路学校
专  业 加里敦

  自我简介:

2022年,我仍然是一个苦逼的中学生

这道题真的是用来练哈希表的无疑

但是这道题真的用哈希吗?


答案是:不用!


我们都学过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;
}
2024-10-17 19:48:20
哇哇我写的真不错
2022-03-28 19:27:46
  • «
  • 1
  • »