Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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 - Fatal编程技术网

C# 字典/哈希映射密钥大小

C# 字典/哈希映射密钥大小,c#,c++,data-structures,C#,C++,Data Structures,计算密钥的哈希值,并将其除以素数。 一般来说,是否有任何标准的素数(比如32/64位) 我的理解是哈希表的大小不可调整,其内部数组依赖于此。如果我有一个只有5个元素的哈希表,键空间会有浪费吗 编辑:我应该把这个框好一点。C++中的HASHYMAP(Boost)还是C<字典< /P> < P>通常采用素数作为内部数组的大小。也就是说,如果有人要求一个包含100个项目的哈希表,那么您选择下一个大于等于100的素数,这就是大小。在这种情况下,您的表大小为101 但这不是唯一的方法。通常,素数用作内部数

计算密钥的哈希值,并将其除以素数。 一般来说,是否有任何标准的素数(比如32/64位)

我的理解是哈希表的大小不可调整,其内部数组依赖于此。如果我有一个只有5个元素的哈希表,键空间会有浪费吗


编辑:我应该把这个框好一点。C++中的HASHYMAP(Boost)还是C<字典< /P> < P>通常采用素数作为内部数组的大小。也就是说,如果有人要求一个包含100个项目的哈希表,那么您选择下一个大于等于100的素数,这就是大小。在这种情况下,您的表大小为101


但这不是唯一的方法。

通常,素数用作内部数组的大小。也就是说,如果有人要求一个包含100个项目的哈希表,那么您选择下一个大于等于100的素数,这就是大小。在这种情况下,您的表大小为101


但这不是唯一的方法。

事实上,哈希表大小可以自动调整。您可能要做的是分配一个大小为N的数组,使用散列模N(一些素数)对数组进行索引。如果您跟踪分配的密度,那么当它增加到超过某个阈值时,您可以分配一个大小为N1的新数组(某个较大的素数),并从旧数组中复制每个元素,应用具有新模的哈希函数以找到其在新哈希表中的位置。最后,取消分配旧数组并使用新的更大数组。

事实上,哈希表大小可以自动调整。您可能要做的是分配一个大小为N的数组,使用散列模N(一些素数)对数组进行索引。如果您跟踪分配的密度,那么当它增加到超过某个阈值时,您可以分配一个大小为N1的新数组(某个较大的素数),并从旧数组中复制每个元素,应用具有新模的哈希函数以找到其在新哈希表中的位置。最后,您可以释放旧的数组并使用新的更大的数组。

为什么不使用Reflector来查看C#字典或哈希表实现?Greg和Jim的两个答案在一般意义上和C#实现上都是正确的


总之,C#Dictionary实现使用质数(大于其容量)作为内部bucket数组的大小,并使用它分割哈希代码。每当需要调整内部阵列的大小时,它都会使用现有容量的两倍作为新容量。

为什么不使用Reflector查看C#字典或哈希表实现?Greg和Jim的两个答案在一般意义上和C#实现上都是正确的


总之,C#Dictionary实现使用质数(大于其容量)作为内部bucket数组的大小,并使用它分割哈希代码。每当需要调整内部数组的大小时,它都会使用现有容量的两倍作为新容量。

如果只有5个元素,为什么还要使用哈希表?因此,您从不使用包含5个元素的字典?问题是为什么不呢?这是一个假设性问题。或者,你建议使用哪种边界号?我想我已经创建了一个只包含五个元素的词典。不过,我会将其分配为更大的大小(可能超过10个),以减少冲突的可能性。如果您只有5个元素,为什么要使用哈希表呢?所以您永远不会使用包含5个元素的字典?问题是为什么不呢?这是一个假设性问题。或者,你建议使用哪种边界号?我想我已经创建了一个只包含五个元素的词典。不过,我会将其配置为更大的尺寸(可能超过10个),以减少碰撞的机会。谢谢!我本该把这个框好一点的。在C++ HASHMAP(Boost)或C语言词典中,一般的方法是什么?我本该把这个框好一点的。C++ HASHMAP(BOOST)或C?