工大人在上海
做为c++菜鸟也要嗷嗷飞!
博客园
首页
新随笔
新文章
联系
订阅
管理
posts - 25,comments - 10,trackbacks - 0
<
2007年4月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
欢迎大家光顾的我日志页面,在这里,我会跟大家分享大学生活的感悟,技术学习的心得。有建议的朋友希望能够多多留言,多多指教。 3x~~ 天下大事 必作于细
昵称:
天下大事 必作于细
园龄:
4年10个月
粉丝:
0
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
C#(2)
C/C++(8)
College Life
Intern Thinking(5)
It's My Life(8)
Java
随笔档案
2007年8月 (6)
2007年7月 (2)
2007年6月 (4)
2007年5月 (4)
2007年4月 (4)
2007年3月 (5)
相册
True Me
Friends
KillKill's Blog
Lazy Guy's Blog
Lazy's Website
My Brother Tony's Blog
Pangwa's Blog
最新评论
阅读排行榜
评论排行榜
推荐排行榜
关于SGI STL源码中hashtable的一点疑问
今天在研究SGI STL中的hashtable时有一点疑问一直没有想明白。
hashtable使用hash function来计算元素位置。但是sgi使用另外一个函数bkt_num()来完成这个任务,有这个函数来调用hash function来取得一个可以对hashtable进行取模运算的值,对于char,int,long等只需要返回其值即可。但是对于string,sgi设计了一个转换函数如下:
template
<
class
_Key
>
struct
hash
{ }
;
inline size_t __stl_hash_string(
const
char
*
__s)
{
unsigned
long
__h
=
0
;
for
( ;
*
__s;
++
__s)
__h
=
5
*
__h
+
*
__s;
return
size_t(__h);
}
这里的__h = 5*__h + *__s应该是把字符串转变成了一个long型的变量,但是采用这样的的运算进行转变有什么好处呢?为什么要乘5呢?
希望能有达人解释一下。。。。
也希望能够在网上搜到答案
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2007-04-04 17:23
天下大事 必作于细
阅读(569)
评论(3)
编辑
收藏
FeedBack:
1964529
#1楼
2007-04-04 18:24
|
aaa[未注册用户]
不乘5的话, 两个字符相同但顺序不同的字符串的hashcode是相同的, 显然不行, 为什么乘五就不知道了.....
回复
引用
#2楼
[
楼主
]
2007-04-04 19:49
|
天下大事 必作于细
谢谢评论,但我就是不知道为什么非要乘5啊,为什么不选择其他数字呢?
回复
引用
查看
#3楼
2010-11-19 14:29
|
borrows
怎么使用hashtable 啊?
回复
引用
查看
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
苹果征集iPad 3发布会演示应用 重点是图形应用
·
京东商城涉足汽车销售 将上线售车频道
·
亚马逊新广告挑衅苹果:一个iPad可买三台kindle
·
动视暴雪确认今年第二季度推出《暗黑破坏神3》
·
官方承认 Google Bar 逆行倒施
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务