手写HASHMAP

本文介绍了一种手写HASHMAP的实现方式,该方法通过自定义结构存储数据,并利用哈希算法快速查找,相较于标准库函数map,此方法在特定场景下能提供更高效的性能。

手写HASHMAP

[cpp]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. const int MAXN=10010;  
  2. const int HASH=10100;            //需要hash的数的总个数最大值   
  3. struct HASHMAP  
  4. {  
  5.     int head[HASH];  
  6.     int next[MAXN];  
  7.     int size;  
  8.     int state[MAXN];  
  9.     void init()  
  10.     {  
  11.         size=0;  
  12.         memset(head,-1,sizeof(head));  
  13.     }  
  14.     int push(int st)  
  15.     {  
  16.         int i,h=st%HASH;  
  17.         for(i=head[h];i!=-1;i=next[i])  
  18.            if(state[i]==st)  
  19.              return i;  
  20.         state[size]=st;  
  21.         next[size]=head[h];  
  22.         head[h]=size++;  
  23.         return size-1;  
  24.     }  
  25. }hm;  

以上代码实现功能与下面一样,但速度快许多:

 

 

[cpp]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. map<int,int>mp;  
  2. int tol=0;  
  3. int insert(int x)  
  4. {  
  5.     if(mp.find(x)==mp.end())mp[x]=tol++;  
  6.     return mp[x];  
  7. }  

转载于:https://www.cnblogs.com/lupeng2010/p/6489385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值