pb_ds庫之hash 最近在做hash的模板題,自己手打的的hash代碼長還容易出錯。 但STL中有一個pb_ds庫,裡面的hash函數和手打的hash速度差不多,比STL中的map快多了。 與大家分享一下,不足之處還請各位神犇指出和補充。 本文只是簡略地介紹此函數在hash中的應用,若想深入研究 ...
pb_ds庫之hash
最近在做hash的模板題,自己手打的的hash代碼長還容易出錯。
但STL中有一個pb_ds庫,裡面的hash函數和手打的hash速度差不多,比STL中的map快多了。
與大家分享一下,不足之處還請各位神犇指出和補充。
本文只是簡略地介紹此函數在hash中的應用,若想深入研究,這裡有一個:C++的pb-ds庫在OI中的應用
網址:https://wenku.baidu.com/view/ffc18b542f60ddccdb38a00d.html?pn=NaN
pb_ds庫hash函數需要調用的的頭文件:
#include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/hash_policy.hpp> using namespace __gnu_pbds;
函數聲明方式:
cc_hash_table<int,bool>h; gp_hash_table<int,bool>h;
其中所定義的兩種數據類型不局限於<int,bool>,<string,bool>,<string,int>都可以。
cc_hash_table是拉鏈法
gp_hash_table是查探法
查探法要快一些,個人推薦用查探法。
補充:
pb_ds庫中的兩種hash函數比map的效率大大提高,比起手打hash代碼簡潔且易於調試。
個人覺得如果追求速度的話個人覺得還是手打hash快一點。