1:基本类型,priority_queue定义时只指定第一个参数,默认是小顶堆;指定第三个参数为less<>就是大顶堆了
2:自定义类型,priority_queue必须指定全部三个参数,比较函数也要定义成个结构体struct cmp,里面定义一个
bool operator( )( arg1, arg2){ ....};
#include#include using namespace std;int n;//1: 基本类型//priority_queue q;//仅有第一个参数,缺省后两个,默认是大顶堆//priority_queue , less > q;//使用less<>, 大顶堆, priority_queue , greater > q;//使用greater<>, 小顶堆//2: 自定义类型typedef struct node{ int data;};typedef struct cmp{ bool operator()(node a, node b){//注意operator后面跟着() return a.data > b.data; }};//priority_queue qn1;//不支持! //priority_queue , cmp> qn;//cmp里使用 <比较, 大顶堆priority_queue> 比较, 大顶堆priority_queue> , cmp> qn;//cmp用>, 小顶堆int main(){ //1: 基本类型 /*q.push(5); q.push(13); q.push(6); while(!q.empty()){ printf("%d\n",q.top()); q.pop(); }*/ //2: 自定义类型 node n1; n1.data = 17; qn.push(n1); node n2; n2.data = 4; qn.push(n2); node n3; n3.data = 9; qn.push(n3); while(!qn.empty()){ printf("%d\n",qn.top()); qn.pop(); } return 0;}
ref: