2015-11-18 36 views
0

我只是需要一些关于C++代码的说明。为什么必须在哈希表链接的C++代码中输入密钥

根据http://www.sanfoundry.com/cpp-program-hash-tables-doubly-linked-list/, 我发现用户需要输入valuekey。我可以理解为什么用户需要输入value但为什么在世界上用户需要输入key? 1)我们知道元素将通过使用散列函数(例如:modulo:元素%TABLE_SIZE)位于散列表中。但在这个代码,他们会问用户他们想要把他们的价值在其中的哈希表中的位置编号输入:

"Enter key at which element to be inserted: "; 

从我的理解,用户将不会允许输入自己选择的位置或键的元素因为存在散列函数。

我很迷失在此,请帮助我,我知道有很多专家在这里所以这就是为什么我在这里寻找答案

+1

从文章中我看到这是HashMap ,它用于获取基于键的值。你正在寻找的可能是HashSet。 –

+2

我想你不明白地图是什么。 – ZDF

+0

其实我想要用户只插入像这个应用程序的价值https://www.cs.usfca.edu/~galles/visualization/OpenHash.html。感谢提到有关HashMap,我不知道这之前 – doraemon

回答

0

一般来说,哈希表店键值对小号。

也许在你的心智模型中有一个散列表的简化版本,其中的密钥是根据值计算的?

+0

在这种情况下,该网站使用非常糟糕的措辞。您不会将数据存储在某个密钥上,而是将其存储在“某个密钥下”。基本的英语。在电话簿中,我的名字是第73页的“at”,但在“gnasher”键下面。 – gnasher729

+0

不要拍信使;) –

0

通常的方法是根据密钥计算散列值,根据散列值计算表中的首选索引,再加上(希望很少)一系列替代索引。散列值的计算方式应尽可能接近随机查找。首选索引通常只是哈希值模表大小。替代索引是使用一个或多或少的复杂算法来计算的 - 在最不重要的情况下(哈希值+ i)第i个替代地址的模表大小。

从来没有见过哈希表实现,其中用户或软件开发人员被要求提供替代索引。实际上,散列表之外的任何数据存储(例如双链表)都已经过时了。你只是让哈希表足够大,散列函数足够好,以避免冲突,如果数据量增加,那么你自动分配一个更大的表,在用户后面

+0

“你只是让哈希表足够大,哈希函数足够好,以避免碰撞” - 这是不现实的(=理智)..在哪里你听到这一切? –