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.