手写HashMap
2021/10/30 23:41:01
本文主要是介绍手写HashMap,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
手写HashMap
优势 :代替Unordered_map,某些题会卡unmap。
缺点:需要手写,代码量比调用库函数大。
哈希模数表
https://planetmath.org/goodhashtableprimes
算法流程
基于链式前向星。
插入结点(ins) 就遍历图,如果找到就直接value++,否则新建一个结点。
查找(find) 也是遍历图,如果找到直接返回value,否则返回0。
代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; const int N=1e5+5,mod=98317; struct HashMap{ //hash prime table //[24593,49157,98317](1e5) //[196613,393241,786433](1e6) //[1572869,3145739,6291469](1e7) //[12582917 25165843 50331653] (6e7) //mod<N struct node{ int k,v,nt; }e[N]; int h[N],cnt; void ins(int x){ int u=x%mod; for(int i=h[u];i;i=e[i].nt) if(e[i].k==x) {e[i].v++;return;} e[++cnt]={x,1,h[u]},h[u]=cnt; } int find(int x){ int u=x%mod; for(int i=h[u];i;i=e[i].nt) if(e[i].k==x) return e[i].v; return 0; } }mp; int main(){ int n; //input //10 //1 1 1 2 2 3 4 5 10 9 //output //3 2 1 1 1 0 0 0 1 1 scanf("%d",&n); for(int i=1;i<=n;i++){ int x;scanf("%d",&x); mp.ins(x); } for(int i=1;i<=10;i++) printf("%d ",mp.find(i)); return 0; }
这篇关于手写HashMap的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程