C++ hash函数 23
C++ hash函数,在C++中,哈希是用于创建哈希表的函数。当调用该函数时,它将为hash函数中每个键生成一个地址。如果哈希函数返回唯一的哈希数,则此哈希函数称为通用哈希函数。C++的标准库提供了一个名为Hash Class的类,可以在不传递任何参数的情况下使用哈希函数进行哈希,它将键映射到一些值,这些值形成一个哈希表和一个数据结构,该函数将把索引计算到一个数组中。
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(哈希表的大小)”,例如。哈希表的大小为10,键值(项)为48,则哈希函数=43%10=3;哈希代码将是3,这意味着43个项目被放置在哈希表中的索引3处。有时可能会发生将项目放置在同一索引的冲突,假设如果我们有键值63,那么它将再次产生3,因为哈希码与键值43冲突,所以为了避免这种类型的冲突或解决这种类型的问题,我们可以使用开放哈希或单独的链接,其实现类似于链表。另一种解决方法是使用线性探测,它允许将所有条目存储在哈希表本身中,以及许多其他方法来解决此冲突问题。
哈希表是一个具有特定大小的数组,该数组具有一个哈希函数,该函数从对象映射到哈希表中的项,其中这些对象被放置在哈希表中,这就像一个数组,每个对象都有一个索引,它将通过哈希函数进行索引,可以计算为index=H(object),因此这样的数组被称为哈希表。这个哈希类只有一个名为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();
}
输出:
在上面的程序中,我们定义函数strHashing(),声明了一个字符串“H1”,并且我们获取字符串“educba”的字符串散列值。首先,我们将创建一个名为“hash_obj”的哈希对象,其中我们将字符串作为参数传递给创建的哈希对象,字符串“educba”的哈希值为11677389314383596536,。因此,除了字符串数据类型之外,还有许多其他数据类型,其中散列函数可用于散列每种数据类型的值,例如char、vector、Boolean、float、double、long等。
现在,让我们使用C++创建一个哈希表,在下面的示例中使用哈希函数值。
例子:
#include <iostream>
#include <list>
using namespace std;
class hash_table{
private:
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类的语法创建Hash类的对象的语法。我们学习了获取数据类型变量的散列值的示例。我们还了解了如何创建哈希表以及如何在哈希表中插入元素。
推荐文章
这是一本关于C++散列的指南。在这里,我们将讨论哈希函数在C++中的工作方式,并给出示例和输出。您还可以查看以下文章以了解更多信息
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!