如何实现一个key和value都是string类型的hashtable(开链法解决冲突)

march_on 2013-10-19 11:13:17
昨天的一道笔试题,想了很久都没想出来个所以然来....

说下我的思路.

首先,对于hashtable来说,初始化时数组长度应该是固定的吧,然后把string类型映射为int型的key,然后对于映射到同一个key的value都加入到这个key对应的链表中.我不明白的问题有两个:

1.怎么把string映射成key?如果key很大,那hashtable中的数组岂不是非常大,另外,不同的string可以映射成相同的key吗?如果是这样,那么怎么才能根据字符串类型的key得到相应的value呢?

求指教
...全文
269 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocktyt 2013-10-31
  • 打赏
  • 举报
回复
引用 4 楼 merlinfang 的回复:
有std::hash_map吧,你看hash()这个函数就明白了
std里没有hash_map,只有unordered_map 不管是哪个,你都找不到hash()这个函数
derekrose 2013-10-31
  • 打赏
  • 举报
回复
哈希函数就那么几个要点
羽飞 2013-10-31
  • 打赏
  • 举报
回复
网上很多计算字符串hash值的算法,不过基本都是扫描字符串的每个字节做运算,最后得出一个int的结果
merlinfang 2013-10-31
  • 打赏
  • 举报
回复
有std::hash_map吧,你看hash()这个函数就明白了
rocktyt 2013-10-31
  • 打赏
  • 举报
回复
引用 2 楼 buyong 的回复:
std::hash_table 源代码
std里没有hash_table,只有unordered_map
buyong 2013-10-31
  • 打赏
  • 举报
回复
std::hash_table 源代码
showjim 2013-10-19
  • 打赏
  • 举报
回复
hash算法有自由,想怎么算就怎么算,比如看成int数组异或,比如去某一段等等,网上也能搜到很多经典的算法。关键的是要随机结果分布相对均匀,也就是要冲突均匀。 key大容器小,一般都是求模,容器尺寸一般都取素数;当然你也可以使用其它映射规则。 只有key是找不到value的,必须要原始的string。开链法,每一个key都有一个string+value链表,就是在这个链表中O(n)搜索这个value。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧