数组/set/map是常用的哈希容器
当我们需要快速查找一个元素是否在集合中,考虑用哈希法
下面以AcWing模拟散列表为例,学习set, map的用法。
题目描述:
解法一、map
#include<iostream>
#include<map>
using namespace std;
int n;
map<int, bool> mp;
int main(void)
{
cin>> n;
while(n--)
{
char c;
int x;
cin>> c >> x;
if(c == 'I')
mp[x] = 1;
else
if(mp.count(x))
cout<< "Yes" << endl;
else
cout<< "No" << endl;
}
return 0;
}
解法二、unordered_map
一般情况下比map要快
#include<iostream>
#include<unordered_map>
using namespace std;
int n;
unordered_map<int, bool> mp;
int main(void)
{
cin>> n;
while(n--)
{
char c;
int x;
cin>> c >> x;
if(c == 'I')
mp[x] = 1;
else
if(mp.count(x))
cout<< "Yes" << endl;
else
cout<< "No" << endl;
}
return 0;
}
解法三、set
#include<iostream>
#include<set>
using namespace std;
int n;
set<int> s;
int main(void)
{
cin>> n;
while(n--)
{
char c;
int x;
cin>> c >> x;
if(c == 'I')
s.insert(x);
else
if(s.count(x))
cout<< "Yes" << endl;
else
cout<< "No" << endl;
}
return 0;
}
解法四、unordered_set
比set快很多
#include<iostream>
#include<unordered_set>
using namespace std;
int n;
unordered_set<int> s;
int main(void)
{
cin>> n;
while(n--)
{
char c;
int x;
cin>> c >> x;
if(c == 'I')
s.insert(x);
else
if(s.count(x))
cout<< "Yes" << endl;
else
cout<< "No" << endl;
}
return 0;
}