C++ 散列键和值
我很好奇为什么散列同时需要散列键和散列值 如果散列键是int,则将散列键更改为散列码,散列码是散列的索引。然而,散列值和散列键是一样的,不是吗?所以,当我使用int作为散列键时,散列值不需要作为散列键的参数副本 如果我将散列键作为字符串,则散列键也会更改为散列代码。然后,散列值是我想与字符串匹配的数字? 还是字符串的指针C++ 散列键和值,c++,c,data-structures,hash,C++,C,Data Structures,Hash,我很好奇为什么散列同时需要散列键和散列值 如果散列键是int,则将散列键更改为散列码,散列码是散列的索引。然而,散列值和散列键是一样的,不是吗?所以,当我使用int作为散列键时,散列值不需要作为散列键的参数副本 如果我将散列键作为字符串,则散列键也会更改为散列代码。然后,散列值是我想与字符串匹配的数字? 还是字符串的指针 我不明白为什么需要散列值。首先让我们了解一些术语,因为您似乎对它们感到困惑1 在散列中,实际上只有两件事,脚注中的项目,可能是您的散列值/键和散列代码。将输入项传递给哈希函数,
我不明白为什么需要散列值。首先让我们了解一些术语,因为您似乎对它们感到困惑1 在散列中,实际上只有两件事,脚注中的项目,可能是您的散列值/键和散列代码。将输入项传递给哈希函数,然后返回哈希代码。这是一般情况,但请确保您已经阅读了脚注-可能有正当理由区分完整项目和关键部分 至于为什么需要哈希值和代码,比如说,你要记录地球上所有超级聪明、英俊的人以及他们的狗的名字,因此你需要添加字符串paxdiablo:lilly 所以你把这个字符串扔进你的散列函数,最后得到一个由paxdiablo计算出的42的散列码,这就是它所在的bucket 然而,由于散列函数几乎总是一个多对一操作,许多其他字符串也将散列到42,因此无法仅根据散列代码判断它实际上是数据结构中的paxdiablo 事实上,我的死敌paxangelo有一只猫叫fluffybunnykins,它是你所不希望遇到的最愚蠢、最丑陋的生命形式之一,并且它的哈希代码为42。所以,当要找出谁在42桶里时,除非原始字符串在里面,否则你怎么区分这两者呢 hashcode决定哪个bucket用于一个项目,但您仍然必须将该项目实际放入bucket中 我试了大约十分钟,但我仍然对自己的想法不太满意。据我所知,您正在使用: 散列值作为要存储的整个项。 散列键是用于散列的散列值的一部分。 哈希值作为哈希函数的结果。
我倾向于不区分前两种,因为在我看来没有什么真正的好处。我通常会将整个项传递给散列函数,但可以想象,您可以设计一个只需要关键部分的解决方案,特别是如果您希望在不同的记录布局上使用散列函数,并且关键点位于不同的位置。那么如果我想在散列中找到paxdiablo。我是否搜索哈希值。。?这意味着有一些空格表示paxdiablo==散列值,对吗@양수현, 如果你想找到paxdiablo,你可以对字符串进行散列得到42,然后转到42 bucket并搜索所有条目,直到你找到它或没有,视情况而定。当我搜索paxdiablo时,我仍然不确定散列值。那么散列值是paxdiablo吗。。?