前言
其實我很早開始就用pb_ds庫了,用起來確實方便.但最近感覺還是對這個了解頗少,還是來補一下
話說有人會忘記頭文件,其實這有個伎倆,找到電腦上的g++文件夾.Ubuntu應該在etc中,Windows的話各省應該都預裝了Dev-CPP吧,右鍵打開文件位置
進入Dev-Cpp\MinGW32\lib\gcc\mingw32\4.8.1\include\c++
然后就發現一大堆頭文件還有個叫pb_ds的文件夾,點進去又有大堆頭文件,你按照相似方式ext/pb_ds/...加入你的代碼就好了
當然也有個萬能的#include<bits/extc++.h>
不過有些可能不資瓷
哈希表
哈希表再也不用map/unordered_map實現了
調用
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
gp_hash_table <int,int>g;
cc_hash_table <int,int>c;
支持[]重載運算符,非常方便
gp_hash_table
使用查探法,cc_hash_table
使用拉鏈法
我一直是用gp_hash_table
而且確實一般會稍快一點,然而昨天我做到了一道題毒瘤出題人8e5個數基本上是連續的
gp_hash_table
就真的GG了,10s還沒跑出來,cc_hash_table
一下就跑完了
看了這篇文章才知道原因:https://blog.csdn.net/u011080472/article/details/51177412
所以我個人建議使用cc_hash_table
優先隊列
這里只講最常見的配對堆的使用,對其他種類的堆感興趣的請自行了解
調用
#include <ext/pb_ds/priority_queue.hpp>
using namespace _gnu_pbds;
typedef pair<int,int> pii
typedef priority_queue < pii ,std::less<pii> ,pairing_heap_tag> Heap
這樣Heap poi
就讓poi稱為一個配對堆了
非常快