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