哈希键和值
Hash key and value
我很好奇为什么哈希同时需要哈希键和哈希值
-
如果哈希键是int类型,则哈希键将被更改为哈希码,这是哈希的索引。但是,哈希值与哈希键相同,不是吗?因此,当我使用int作为哈希键时,哈希值不需要作为参数(与哈希键重复)。
-
如果我将哈希键作为字符串,哈希键也将更改为哈希码。然后,哈希值是我想要与字符串匹配的数字?还是字符串的指针?
我不明白为什么需要散列值
让我们先弄清楚一些术语,因为你似乎对它们感到困惑1。
在哈希中,实际上只有两件事,项(来自脚注,可能是你的哈希值/键)和哈希码。您将输入项传递给哈希函数并返回一个哈希码。这是一般情况,但请确保你已经阅读了脚注——区分完整条目和关键部分可能是有正当理由的。
至于为什么你需要哈希值和代码,比如说,你要记录地球上所有超级聪明、英俊的人(以及他们的狗的名字),因此你需要添加字符串paxdiablo:lilly
。
所以你把这个字符串扔到你的哈希函数中,最终得到一个42的哈希码(从paxdiablo
计算),这就是它所在的桶。
然而,由于哈希函数几乎总是一个多对一的操作(许多其他字符串也将哈希到42),没有办法告诉它实际上是paxdiablo
在你的数据结构仅基于哈希码。
事实上,我的死敌paxangelo
,它有一只猫,在所有的东西中,fluffybunnykins
,是你不希望遇到的最愚蠢、最丑陋的生命形式之一,它也生成了一个42的哈希码。所以,当要找出谁在42桶里的时候,你要如何区分这两个,除非原始字符串在里面?
哈希码决定项目使用哪个桶,但您仍然需要实际将项目放入桶中。
1我尝试了大约十分钟,但我仍然对我想到的内容不完全满意。据我所知,你用的是:
- 哈希值作为要存储的整个项。
- 哈希键是用于哈希的哈希值的那一部分。
- 哈希值作为哈希函数的结果。
我倾向于不区分前两者,因为在我看来没有什么可获得的。我通常将整个项目传递给哈希函数,但您可以设计一个只需要关键部分的解决方案,特别是如果您想在不同的记录布局上使用哈希函数(键在不同的位置)。
- 调整大小和复制哈希表数组中的元素
- 同时写入和读取哈希表
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 在具有 std::p air 键和值的映射中添加 b2vec2
- 如何使用 AES 和 sha256 哈希作为密钥加密++进行加密
- 如何将键和值从映射传输到另一个映射?
- std::在地图上查找无法正常工作并循环访问地图的键和值
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 多重映射的每个元素是否同时包含键和值
- 如何正确使用带有智能指针和自定义类的映射作为键和值
- 可以安全地依赖unordered_map中的初始化值(哈希映射)
- 如何使用 boost 连接映射的键和值,特别是如果值是结构
- 对象来映射键和值
- 我的代码到底在哪里不符合键和值类型的规范
- 比较键和值 std::maps
- C++STL映射键和值工作不正常
- 适用于大文件和 512 KB 块的最快和轻量级哈希算法 [C,Linux,MAC,Windows]
- Lua 访问表的键和值
- 当我使用 std::map 从文件中读取值时,该值会随之",",因为键和值用逗号分隔
- 哈希键和值