怎么在c语言中编译map,如何用C语言实现map

算法分析:

step 1:将读入的key映射成一个int型的数,在这里介绍一个经典的hash函数的构造:首先,我们知道每一个字符对应着唯一的ASCII码,于是对于字符“123”,我们可以看成(48 49 50),然后我们随便找一个数,比如我们取61(只是61是一个质数),那么我们可以对“123”编码成48*61*61+49*61+50,是不是有点类似进制转换呢?没错,只要你承认61进制下可以有127这样的数就可以啦(因为一个字符的ASCII最大可以是127),细心的读者会发现,这样编码很快就会超过int,于是我们再随机找一个数,比如10007(10007还是一个质数),对刚刚求得结果对10007取余数。(注:由于同余定理,真正算法实现的时候采用边加边取余,边乘边取余,而不是最后再取余)

step 2:将key编号之后会发现一个问题,很多key会对应相同的hashid,那怎么办呢?答案是对每一个hash值(hash值介于0-hashsize-1)构造一个链表,每次读入一个key,计算它的hashid,然后在对应的链表中插入这个映射,于是查询的时候,也类似地先计算它的hashid,然后在它对应的链表中一个一个找,找到找到key为止,最后输出key对应的value。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值