目录
map函数的概念及基本用法:
在散列表问题时,应该对c++中map函数的使用有一定了解
map简介:
map是STL的一个关联容器,它提供一对一的hash
包含在头文件#include<map>
map<key,value>mp;
其中key为索引值,可以近似认为就是相当于数组的下标,value相当于值
(其实理解起来应该是key存在了value的位置)
map函数的用法:
下面介绍map函数的几种用法
1、查找元素
即查找关键key出现时,它返回数据所在对象的位置
while(iter!=mp.end())
{
cout<<iter->second<<endl;
}
2、map的大小
int n=mp.size();
3、map的基本操作函数(只列举了几个)
mp.clear();//删除所有元素
mp.count();//返回元素出现的次数(key不会重复,所以只能是1或者0)
mp.empty();//判断是否为空
mp.find();//查找一个元素
mp.insert();//插入元素
mp.size();//读取mp大小
7-7 字符串关键字的散列映射
题目链接:题目详情 - 7-7 字符串关键字的散列映射 (pintia.cn)
代码易于理解
#include<bits/stdc++.h>
using namespace std;
const int N=1e9;
map<string,int>mp;
string s;
int n,p;
bool vis[N];
bool flag;
int main(){
cin>>n>>p;
while(n--){
cin>>s;
//getline(cin,s);
reverse(s.begin(),s.end());
//cout<<s<<endl;
if(mp.count(s));
else{
int x=0,cnt=0;
for(int i=0;i<(int)s.size()&&i<3;i++){
x+=((s[i]-'A')*(int)pow(32,i))%p;
}
int tmp=x;
while(vis[tmp%=p]){//平方探测法
tmp=x+pow(cnt,2);
if(vis[tmp%=p])
tmp=x-pow(cnt++,2);
}
vis[tmp]=1;
mp[s]=tmp;}
cout<<mp[s];
if(n!=0)
cout<<' ';
}
}