浅析C++gnu pbds库

FBIWZH's Blog / 2023-08-12 / 原文

pbds俗称平板电视,__gnu_pbds自带了封装好了的平衡树、字典树、hash数据结构,速度快过\(STL\)

\(Ⅰ\).引入

想要使用\(pbds\),必须先要添加头文件,\(pbds\)并不属于bits/stdc++.h的一部分,所以也只能在\(g++\ Mingw64\)的环境下食用。

以下是头文件:
#include <bits/extc++.h>
以下是命名空间:
using namespace __gnu_cxx;
using namespace __gnu_pbds;

不得不说确实有点难背

\(Ⅱ\).使用

1.哈希表

个人认为这是最好用的。
常数很小,支持所有类型,不像unordered_map (bushi
对比unordered_map:

  • +O2的情况下速度快了\(30ms~80ms\)左右
  • 不加O2的情况下速度快了\(100ms~120ms\)左右
  • 空间复杂度略大
  • 功能相当完备
  • unordered_map更难\(hack\)

\(pbds\)中,有两种\(hash\),分别是
\(cc\_hash\_table\)
\(gp\_hash\_table\)