```cpp
#include <ext/pb_ds/priority_queue.hpp>
using namespace __gnu_pbds;
-__gnu_pbds ::priority_queue<
- T, Compare, Tag, Allocator>
+__gnu_pbds ::priority_queue<T, Compare, Tag, Allocator>
```
## 模板形参
+
- `T` : 储存的元素类型
- `Compare` : 提供严格的弱序比较类型
-- Tag : 是 `__gnu_pbds` 提供的不同的五种堆,Tag参数默认是 `pairing_heap_tag`
- 五种分别是 :
- - `pairing_heap_tag`:配对堆
- 官方文档认为在非原生元素(如自定义结构体/ `std :: string` / `pair`) 中,配对堆表现最好
- - `binary_heap_tag`:二叉堆
- 官方文档认为在原生元素中二叉堆表现最好,不过我测试的表现并没有那么好
- - `binomial_heap_tag`:二项堆
- 二项堆在合并操作的表现要优于配对堆* 但是其取堆顶元素的
- - `rc_binomial_heap_tag`:冗余计数二项堆
- - `thin_heap_tag`:除了合并的复杂度都和 Fibonacci 堆一样的一个 tag
+- Tag : 是 `__gnu_pbds` 提供的不同的五种堆,Tag 参数默认是 `pairing_heap_tag`
+ 五种分别是 :
+ - `pairing_heap_tag`:配对堆
+ 官方文档认为在非原生元素 (如自定义结构体 / `std :: string` / `pair`) 中,配对堆表现最好
+ - `binary_heap_tag`:二叉堆
+ 官方文档认为在原生元素中二叉堆表现最好,不过我测试的表现并没有那么好
+ - `binomial_heap_tag`:二项堆
+ 二项堆在合并操作的表现要优于配对堆 \* 但是其取堆顶元素的
+ - `rc_binomial_heap_tag`:冗余计数二项堆
+ - `thin_heap_tag`:除了合并的复杂度都和 Fibonacci 堆一样的一个 tag
由于本篇文章只是提供给学习算法竞赛的同学们,故对于后四个 tag 只会简单的介绍复杂度,第一个会介绍成员函数和使用方法。
要注明命名空间因为和 std 的类名称重复。
-```
-__gnu_pbds ::priority_queue<int> __gnu_pbds::priority_queue<int, greater<int> >
-__gnu_pbds ::priority_queue<int, greater<int>, pairing_heap_tag>
-__gnu_pbds ::priority_queue<int>::point_iterator id; // 迭代器
-// 迭代器是一个内存地址,在modify和push的时候都会返回一个迭代器,下文会详细的讲使用方法
-id = q.push(1);
-```
+ __gnu_pbds ::priority_queue<int> __gnu_pbds::priority_queue<int, greater<int> >
+ __gnu_pbds ::priority_queue<int, greater<int>, pairing_heap_tag>
+ __gnu_pbds ::priority_queue<int>::point_iterator id; // 迭代器
+ // 迭代器是一个内存地址,在modify和push的时候都会返回一个迭代器,下文会详细的讲使用方法
+ id = q.push(1);
## 成员函数