std :: unordered_map对哈希函数的限制是什么?

What are the limitations for hash functions with std::unordered_map

本文关键字:是什么 函数 哈希 unordered map std      更新时间:2023-10-16

我正在使用std :: unordered_map来表示3维空间排列中的数据。我的哈希功能是:

unsigned int x,y,z;
unsigned int a =1000;
unsigned int b = 1000*a;
unsigned int Hash = x + a*y + b*z;

在发生任何碰撞之前,应允许最多1000个X,1000个单位的Y单位。我的问题是,我的哈希功能无碰撞空间有任何限制吗?还是可以将A和B设置为大数字,并指出如果全部分配了我的系统的内存?

欢呼

首先,有关Hashtables操作的一些背景:

Hashtables不能分配足够的存储桶来保留哈希函数的整个空间。那确实是浪费的(也可能是不可能的)。他们分配了一定数量的存储桶(例如16),然后将每个对键放入键hashes的存储桶中。

当地图达到一定的阈值(通常为75-85%)被占用的水桶时,存储桶的数量会增加。这会迫使所有键重新进行,以便将它们应用于新的模特。

因此,如果您的哈希功能返回特定键的50,并且Hashtable具有16个存储桶,则该键的对存储在存储桶中(50 mod 16)= 2。

如果稍后将存储桶数增加到32,则将将两人移至水桶(50 mod 32)= 18。

我可以将A和B设置为大数字

绝对,因为Hash Modulo使用分配的存储桶的数量来找到特定键的存储桶。