Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 散列键和值_C++_C_Data Structures_Hash - Fatal编程技术网

C++ 散列键和值

C++ 散列键和值,c++,c,data-structures,hash,C++,C,Data Structures,Hash,我很好奇为什么散列同时需要散列键和散列值 如果散列键是int,则将散列键更改为散列码,散列码是散列的索引。然而,散列值和散列键是一样的,不是吗?所以,当我使用int作为散列键时,散列值不需要作为散列键的参数副本 如果我将散列键作为字符串,则散列键也会更改为散列代码。然后,散列值是我想与字符串匹配的数字? 还是字符串的指针 我不明白为什么需要散列值。首先让我们了解一些术语,因为您似乎对它们感到困惑1 在散列中,实际上只有两件事,脚注中的项目,可能是您的散列值/键和散列代码。将输入项传递给哈希函数,

我很好奇为什么散列同时需要散列键和散列值

如果散列键是int,则将散列键更改为散列码,散列码是散列的索引。然而,散列值和散列键是一样的,不是吗?所以,当我使用int作为散列键时,散列值不需要作为散列键的参数副本

如果我将散列键作为字符串,则散列键也会更改为散列代码。然后,散列值是我想与字符串匹配的数字? 还是字符串的指针


我不明白为什么需要散列值。

首先让我们了解一些术语,因为您似乎对它们感到困惑1

在散列中,实际上只有两件事,脚注中的项目,可能是您的散列值/键和散列代码。将输入项传递给哈希函数,然后返回哈希代码。这是一般情况,但请确保您已经阅读了脚注-可能有正当理由区分完整项目和关键部分

至于为什么需要哈希值和代码,比如说,你要记录地球上所有超级聪明、英俊的人以及他们的狗的名字,因此你需要添加字符串paxdiablo:lilly

所以你把这个字符串扔进你的散列函数,最后得到一个由paxdiablo计算出的42的散列码,这就是它所在的bucket

然而,由于散列函数几乎总是一个多对一操作,许多其他字符串也将散列到42,因此无法仅根据散列代码判断它实际上是数据结构中的paxdiablo

事实上,我的死敌paxangelo有一只猫叫fluffybunnykins,它是你所不希望遇到的最愚蠢、最丑陋的生命形式之一,并且它的哈希代码为42。所以,当要找出谁在42桶里时,除非原始字符串在里面,否则你怎么区分这两者呢

hashcode决定哪个bucket用于一个项目,但您仍然必须将该项目实际放入bucket中

我试了大约十分钟,但我仍然对自己的想法不太满意。据我所知,您正在使用:

散列值作为要存储的整个项。 散列键是用于散列的散列值的一部分。 哈希值作为哈希函数的结果。
我倾向于不区分前两种,因为在我看来没有什么真正的好处。我通常会将整个项传递给散列函数,但可以想象,您可以设计一个只需要关键部分的解决方案,特别是如果您希望在不同的记录布局上使用散列函数,并且关键点位于不同的位置。

那么如果我想在散列中找到paxdiablo。我是否搜索哈希值。。?这意味着有一些空格表示paxdiablo==散列值,对吗@양수현, 如果你想找到paxdiablo,你可以对字符串进行散列得到42,然后转到42 bucket并搜索所有条目,直到你找到它或没有,视情况而定。当我搜索paxdiablo时,我仍然不确定散列值。那么散列值是paxdiablo吗。。?