Hash表,类似map用法

    科技2023-11-15  99

    学习目标:

    没。

    掌握hash表


    学习时间:

    提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 10点—晚上12点 2、 周六周日下午 12 点-17 点


    #include<iostream> #include<cstring> using namespace std; #define ll long long #define MOD 1000007 #define Maxn 5000010 ll val[Maxn]; //数组存值 ll nxt[Maxn]; //索引 ll cnt[Maxn]; //计数 ll head[Maxn]; // ll ci; void hashcun(ll a)//存值 { ll x=a%MOD; //取余 for(ll i=head[x];~i;i=nxt[i]) //nxt[nxt[i]] { if(val[i]==a) { cnt[i]++; return; } } //能运行到在都是x从没取过 val[ci]=a; cnt[ci]++; //次数加1 nxt[ci]=head[x]; //上一次余数x的值下标记录在nxt中 // nxt[1]=-1; nxt[2]=1; nxt[4]=2; head[x]=ci; //head数组存放余数下标值 //又再次出现x,对head[x]刷新 ci++; return; } ll hashcha(ll a)//˛查找 { ll x=a%MOD; for(ll i=head[x];~i;i=nxt[i]) if(val[i]==a) return cnt[i]; return 0; } int main (){ memset(head,-1,sizeof(head)); //hashcun(3213);// // hashcun(3214); //hashcun(3214); //ll a=hashcha(3213),b=hashcha(3214); //ll c=hashcha(23); //ÔÚhash±íÖвéÕÒ£¬ÓÐÎÞ´æÈë3214£¬·µ»ØÖµÊÇ´æÈë3212µÄ´ÎÊý //cout<<a<<" "<<b<<" "<<c<<endl; //Êä³ö a==1£¬b==2£¬c==0 hashcun(2);hashcun(3);hashcun(4);hashcun(5); hashcun(12);hashcun(13); hashcun(22); hashcun(32); hashcun(2); cout<<hashcha(2); }
    Processed: 0.018, SQL: 8