c++ - 关于散列图和术语 C++ 的一些确认

标签 c++ linked-list hashmap

我正在做一个介绍 C++ 的实验,我们已经开始使用用户名和密码数据库,我的教授希望我们将其实现为具有动态分配的 LinkedList 数组的 HashMap 。我只想确认我正在做的事情,以便我知道我做的是正确的...

1) Buckets 是存储信息的地方。我假设每个桶都是一个单独的 LinkedList。

2) 哈希函数 % 桶数将决定我在数组中使用哪个索引来存储用户和密码信息。

3) Key-Value ...我对此有点困惑。 key 是我的用户名,值是我的密码吗?

4) 负载因子是存储的键数除以桶数。所以在我的例子中,如果我有 50 个用户存储在我的 hashmap 中,它会是 50/100 吗?我的头脑很难理解这个概念。这是否意味着有时不会使用每个桶?

最佳答案

1) 正确。理想情况下,每个“桶”只包含一个值。如果哈希算法中存在冲突,那么多个值将存储在同一个桶中,因此使用链表。

2) 正确。哈希算法让您知道在 HashMap 中的何处存储/检索数据。

3) 正确。

4) 正确。你不希望 hashmap 的负载因子太高,否则插入/检索的运行时间开始接近 O(N)。散列的有用方面是它(理想情况下)允许在负载因子较低时在 O(1) 时间内插入和检索。

通常,一旦负载因子达到一定水平,hashmap 的大小就会增加并重新哈希,以降低负载因子。 HashMap 比典型的数组使用更多的空间,但这通常被插入/检索数据的速度所抵消。

关于c++ - 关于散列图和术语 C++ 的一些确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796088/

相关文章:

java - Java 中 "if then else"语句的 HashMap 替代方案

java - 在多个二维数组中搜索相似条目的代码

c++ - (C++) 将指针分配给字符串的一部分

c++ - C++ 的跨平台 sleep 功能

c++ - 如何在 Qt Creator 中添加可调整大小的小部件?

algorithm - 'Partitioning a linked list' 是什么意思?

c - 如何理解链表中的双指针

java - 链表中的节点类,特别是构造函数,并使用它来创建随机整数的链表

c++ - 尝试创建计划任务以在 win7 上使用 C++、Task Scheduler 1.0 运行一次

javascript - 如何在 JavaScript 中实现哈希表