pb_ds 库全称 Policy-Based Data Structures。
pb_ds 库封装了很多数据结构,比如哈希(Hash)表,平衡二叉树,字典树(Trie 树),堆(优先队列)等。
就像 vector、set、map 一样,其组件均符合 STL 的相关接口规范。部分(如优先队列)包含 STL 内对应组件的所有功能,但比 STL 功能更多。
pb_ds 只在使用 libstdc++ 为标准库的编译器下可以用。
在堆的实现上,pb_ds 比 STL 提供了更多的选择。
__gnu_pbds::priority_queue<Typename,Compare,Tag>
pb_ds 根据 Tag 参数的不同,支持五种类型的堆:
• pairing_heap_tag 配对堆。
• binary_heap_tag 二叉堆。
• binomial_heap_tag 二项堆。
• rc_binomial_heap_tag 冗余计数二项堆。
• thin_heap_tag 除了合并的复杂度都和 Fibonacci 堆一样。
pb_ds 实现了三种类型的平衡树:
• rb_tree_tag 红黑树。
• splay_tree_tag 伸展树。
• ov_tree_tag 有序向量树。
主要是和 STL 中 set 的比较,pb_ds 更多地支持了:
• s.order_of_key(x) 返回 s 中 x 的排名。
• s.find_by_order(x) 返回 s 中排名为 x 的元素。
• s.join(S) 把 S 合并到 s 中。
• s.split(x,S) 小于等于 x 的属于当前树,其余的属于 S 树。