学习链接
https://oi-wiki.org/ds/hash/
例题链接
https://www.luogu.com.cn/problem/P4305
代码
代码一:STL版本
unordered_map<int,int>mp;
代码二:手写版本(int->int)
struct hash_map{
static const int SIZE=1e6+5;
int tot,head[SIZE],key[SIZE*1],value[SIZE*1],nxt[SIZE*1];
int Hash(int x){
if(x<0)x=-x;
return x%(SIZE-1)+1;
}
int& operator [](int x){
int pos=Hash(x);
for(int i=head[pos];i;i=nxt[i])
if(key[i]==x)return value[i];
key[++tot]=x,value[tot]=0,nxt[tot]=head[pos],head[pos]=tot;
return value[tot];
}
void clear(){tot=0;memset(head,0,sizeof(head));}
hash_map(){clear();}
};
代码三:手写类模板版本(整数->所有类型)
template<class KEY,class VALUE>struct hash_map{
static const int SIZE=1e6+5;
int tot,head[SIZE],nxt[SIZE*1];
KEY key[SIZE*1];
VALUE value[SIZE*1];
int Hash(KEY x){
if(x<0)x=-x;
return x%(SIZE-1)+1;
}
VALUE& operator [](KEY x){
int pos=Hash(x);
for(int i=head[pos];i;i=nxt[i])
if(key[i]==x)return value[i];
key[++tot]=x,value[tot]=0,nxt[tot]=head[pos],head[pos]=tot;
return value[tot];
}
void clear(){tot=0;memset(head,0,sizeof(head));}
hash_map(){clear();}
};