c++中的哈希表
哈希表在编程中也以“Hasp map”一词而闻名。在c++编程语言中,哈希表本质上是一种数据结构,主要用于成对存储数组的键及其值。必须使用散列算法来计算存储值的槽数组的索引,并且每个键必须是不同的。哈希表依赖于根据元素的不同值添加、删除和检索元素。在本文中,我们将在适当示例的帮助下理解哈希表的概念。
哈希函数
在本节中,我们将讨论帮助执行数据结构中数据项相关键的哈希码的哈希函数,如下所述:
Int hashItem (Int key)
{
返回键%表大小;
}
执行数组索引的过程称为哈希。有时,执行相同类型的代码来使用称为冲突的相同键生成相同的索引,这是通过不同的链接(链表创建)和开放寻址策略实现来处理的。
c++中哈希表的工作
指向实际值的指针保存在哈希表中。它使用键来搜索数组的索引,在该索引中,键对应的值需要存储在数组中的所需位置。我们取一个大小为10的哈希表,如下所示:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
让我们根据不同的键随机获取任何数据,并通过计算索引将这些键存储在哈希表中。因此,在哈希函数的帮助下,根据计算索引中的键来存储数据。假设我们取data = {14,25,42,55,63,84}, keys =[15,9,5,25,66,75]。
使用哈希函数计算这些数据的索引。指标值如下所述:
关键 | 15 | 9 | 29 | 43 | 66 | 71 |
---|---|---|---|---|---|---|
计算指数 | 15%10 = 5 | 9% 10 = 0 | 29% 10 = 9 | 43% 10 = 3 | 10 = 66% | 71% 10 = 1 |
数据 | 14 | 25 | 42 | 55 | 63 | 84 |
在创建数组的索引之后,按照前面所述将键对应的数据放置在给定数组的确切索引上。
25 | 84 | 55 | 14 | 63 | 42 | ||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
之后,我们可以看到,如果两个或多个键具有相同的哈希码,导致数组中元素的索引相同,则会发生冲突。我们有一个避免冲突的解决方案:选择一个好的哈希方法并实现准确的策略。
现在,让我们在适当示例的帮助下讨论不同的实现技术。
示例:使用开放哈希技术在哈希表中添加数据
在本例中,我们采用类似Open hash的实现技术来避免哈希表中的冲突。在开放散列或链接中,我们创建一个链表来链接散列表的值。这个例子的代码片段如下所示,描述了开放散列技术:
# include
# include
类HashTable {
私人:
静态const int表大小= 10;
std::列表tableHas [tableSize];
int hashFunc(int key) {
返回键%表大小;
}
公众:
void insert(int key) {
int index = hashFunc(key);
(指数)tableHas .push_back(关键);
}
void viewTable() {
for (int i = 0; i