C++哈希

语言: CN / TW / HK

C++ hash

C++哈希简介

在C++中,哈希是一个用于创建哈希表的函数。当这个函数被调用时,它将为每个键生成一个地址,这个地址是在哈希函数中给出的。而如果哈希函数返回一个唯一的哈希数字,那么这个哈希函数就被称为通用哈希函数。C++的标准库提供了一个叫做hash的类,它可以在不传递任何参数的情况下构造,所以一般来说,hash函数用于散列,它将把键映射到一些值,形成一个hash表的数据结构,这个函数将计算出一个数组的索引。

哈希函数在C++中的工作原理及实例

在这篇文章中,我们将看到在C++标准库中定义为std::hash的哈希类,它允许用户创建一个哈希类,可以在不初始化值和参数的情况下构造对象,可以说一个哈希类是一个模板类。因此,使用哈希的主要目的是使搜索更快,这是用位于内存中的每个值的索引来完成的,哈希函数有键(索引),它指向位于内存中的值的地址,通过使用它的键可以更快地获取。在C++中,哈希函数是一个键指向一个值的函数,这个值是一个地址;当这个函数被调用时,它使用哈希表中的字母和数字的组合,这可以用于数据的排列。

两个或更多的键指向相同的值有可能发生碰撞,可以通过使用链式散列来避免,这将指向链接列表记录,因为散列表中的每个单元都有相同的有相同的值,散列键映射到散列函数值。因此,我们可以实时地将这个哈希函数或哈希表与电话簿联系起来,每个名字是一个键,电话号码是键的值,也就是名字。

哈希类可以使用C++中的STL库来定义,它用于获取传递给它的参数的哈希值,让我们看看下面的语法。

语法。

template <class key> struct hash;

在上面,我们可以看到我们有一个语法来编写或创建一个哈希类,然后我们可以使用下面的语法在std::hash类中创建一个对象。

语法。

hash<class template> obj_name ;

因此,为了在哈希表内添加一些项目,我们需要有一个哈希函数,使用给定键的哈希索引,这必须使用哈希函数计算,如 "hash_inx = key % num_of_slots(size of the hash table) " ,例如,哈希表的大小是10,键值(项目)是48,那么哈希函数=43 % 10 = 3;因此,哈希代码将是3,这意味着43个项目被放置在哈希表的索引3。有时可能会发生将项目放在同一索引的碰撞,假设我们有键值63,那么同样会产生3的哈希代码,这与键值43发生碰撞,所以为了避免这种类型的碰撞或解决这种类型的问题,我们可以使用开放散列或单独的链,其实现方式与链接列表类似,另一种解决方式是使用线性探测,允许所有条目存储在哈希表本身以及许多其他方式来解决这种碰撞问题。

因此,哈希表是一个具有特定大小的数组,它有一个哈希函数,从对象映射到哈希表内的项目,这些对象被放置在哈希表中,这就像一个数组,每个对象都有一个索引,通过哈希函数可以计算出索引=h(对象),所以这样的数组被称为哈希表。这个哈希类只有一个成员函数,即operator(),它返回传递给成员函数的参数的哈希值。因此,在下面,让我们用简单的程序来获取使用各种对象的相应哈希函数的哈希值。

例子。

#include <iostream> #include <string> using namespace std; void strhashing() { string h1 = "Educba"; cout <<"The string given to get the hash value is "<< h1 <<"\n"<<endl; hash<string> hash_obj; cout << "The hash value of the given string is : " << hash_obj(h1)<< endl; } int main() { cout<<"Program to demonstrate the string hash values that are returned using hash class and its objects."<<"\n"<<endl; strhashing(); }

输出。

C++ hash output 1

在上面的程序中,我们可以看到我们正在定义函数strhashing(),我们正在声明一个字符串 "h1",我们试图获得给定字符串 "Educba "的散列值,首先我们将创建一个散列对象 "hash_obj",我们将给定字符串作为参数传递给创建的散列对象,这将展示字符串散列,给定字符串 "Educba "的散列值是11677389314383596536,如上述截图所示。因此,除了字符串数据类型外,还有许多其他的数据类型,哈希函数可以用来哈希每个数据类型的值,如char、vector、Boolean、float、double、long等。

所以,现在让我们尝试用C++编程语言创建一个哈希表,在下面的例子中使用哈希函数值。

例子。

#include <iostream> #include <list> using namespace std; class hash_table{

私有的。

list<int> *tbl; int all_ele; int fetch_hash(int k){ return k % all_ele; }

public:

hash_table(int a){ all_ele = a; tbl = new list<int>[all_ele]; } void inst_ele(int k){ tbl[fetch_hash(k)].push_back(k); } void disp(){ for(int i = 0; i < all_ele; i++){ cout << "The Index of item is " << i << "\n " <<endl; for(int j : tbl[i]) cout <<"The value for the index "<<i << " is " << j << endl; cout << endl; } } }; int main() { hash_table kh(3); int a[] = {2, 4, 6}; for(int i = 0; i < 3; i++) kh.inst_ele(a[i]); cout << "The hash table is created is as follows: " << "\n"<< endl; kh.disp(); return 0; }

输出。

C++ hash output 2

在上面的程序中,我们可以看到我们正在声明一个数组,并试图在哈希表中插入每个项目,我们首先计算哈希函数,它给我们的索引值可以用来放置项目。所以在上面的截图中,我们可以看到我们已经将项目放在了输出中显示的特定索引中。

总结

在这篇文章中,我们得出结论,C++中的hash是一个用于创建哈希表的函数,对于轻松快速地搜索任何项目都非常有用。在这篇文章中,我们看到了使用哈希类的语法来创建一个哈希类的对象的语法。在这篇文章中,我们还看到了一个获取数据类型变量散列值的例子。在这篇文章中,我们还看到了如何创建一个哈希表,以及如何在哈希表中插入元素。

推荐文章

这是一个关于C++哈希的指南。在这里,我们讨论了C++中哈希函数的工作原理和输出的例子。你也可以看看下面的文章,以了解更多信息

  1. C++ Max
  2. 编码
  3. 阵列的长度
  4. C++ thread( )

The postC++ hashappeared first onEDUCBA.