堆的完整定义需要三个参数,如果只给一个参数的话默认是大根堆,所以大多数人会用结构体来定义堆的节点并通过重载小于号来实现小根堆。
而如果想用pair来定义堆中节点的话就只能用三个参数来完整定义小根堆:
typedef pair<int, int> PII; priority_queue<PII, vector<PII>, greater<PII>> heap;