hash_set哈希器函数
hash_set hasher function
假设我决定我的哈希器是整数本身,用于hash_set一系列整数。还说我的整数范围非常大,1-20然后是1000-1200,然后是10000-12000。例如: 1, 2, 5, 7, 1111, 1102, 1000, 10003, 10005这不是一个非常糟糕的哈希函数吗?在这种情况下,hash_set将如何存储数据,例如,如果有人知道的话,gcc 实现。
谢谢
编辑:谢谢你们的两位回复。我应该注意,我已经指定了我的哈希器来返回输入值。例如,1001 的哈希值为 1001。所以我问实现是否会自由地进行另一轮哈希,或者它会看到 1001 并且数组大小会增长到 1001?
即使数据聚集在哈希值中的某些范围内,通常也只会使用每个值的哈希值的最低有效位来存储它。这意味着,如果表示 0-128 的位均匀分布,那么无论哈希值的分布如何,您的哈希函数仍将表现良好。这确实意味着,如果您的值都是某个二进制值的倍数,例如八,那么较低的位将不会如此均匀地分布,并且值将聚集在哈希表中,从而导致过度链接和减慢操作速度。
哈希
表将从小开始,偶尔会在负载因子足够高时重新散列以增长。 当然,仅仅因为哈希值是 12000 并不意味着会有 12000 个存储桶——hash_set会做一些类似"mod"哈希函数输出的事情,使其适合桶的数量。
您描述的身份函数对于许多哈希表实现(包括 GCC)来说并不是一个糟糕的哈希函数。 事实上,这是许多人使用的,显然它是有效的。 加密哈希函数是一个不好的例子,但它有不同的目的。
相关文章:
- 如何为位集找到/实现一个好的哈希函数
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 无冲突的哈希函数
- 在 C++ 中为特定哈希表创建插入函数
- CPP unordered_set只使用比较器而不是哈希
- Qt5 哈希函数在 Windows 7 和 Windows10 上不会返回相同的哈希
- 解决由于在哈希函数中使用了不完整的类型而导致的编译失败
- 将私有结构哈希器运算符转换为静态
- 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
- 错误:哈希函数必须可使用键类型的参数进行调用
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 为什么C++哈希函数的返回类型是 std::size_t,而不是独立于平台的类型?
- 哈希函数计算
- 哈希函数中同一键的不同值和良好的哈希值排序
- 如何将单个字符转换为为基本密码哈希器设置整数,C++
- Win32 MD5哈希器的奇怪行为
- 完美的函数哈希函数生成器
- hash_set哈希器函数
- (C++) 无法迭代密钥哈希器函数中的向量