struct cmp1  
{  
    bool operator () (int &a, int &b)  
    {  
        return a > b ;              // 从小到大排序,值 小的 优先级别高  
    }  
};  

struct cmp2  
{  
    bool operator () (int &a, int &b)  
    {  
        return a < b;             // 从大到小  
    }  
};  

struct number1  
{  
    int x;  
    bool operator < (const number1 &a)const   
    {  
        return x > a.x;         // 从小到大  ,x 小的 优先级别高  
    }  
};  

struct number2  
{  
    int x;  
    bool operator < (const number2 &a)const  
    {  
        return x < a.x;            // 从大到小  ,x 大的优先级别高  
    }  
};  

int a[] = {14,10,56,7,83,22,36,91,3,47,72,0};  
number1 num1[] ={14,10,56,7,83,22,36,91,3,47,72,0};  
number2 num2[] ={14,10,56,7,83,22,36,91,3,47,72,0};  

int main()  
{  
    priority_queue<int>que;  // 采用默认优先级构造队列  从大到小。   

    priority_queue<int, vector<int>, cmp1 >que1;  
    priority_queue<int, vector<int>, cmp2 >que2;  

    priority_queue<int, vector<int>, greater<int> > que3;  //functional 头文件自带的   
    priority_queue<int, vector<int>, less<int> > que4;      //functional 头文件自带的   

    priority_queue<number1> que5;  
    priority_queue<number2> que6;  


    int i;  
    for(i=0;a[i];i++)  
    {  
        que.push(a[i]);  
        que1.push(a[i]);  
        que2.push(a[i]);  
        que3.push(a[i]);  
        que4.push(a[i]);  

    }  

     for(i=0;num1[i].x;i++)  
         que5.push(num1[i]);  
     for(i=0;num2[i].x;i++)   
         que6.push(num2[i]);  

    printf("采用默认优先关系:\n(priority_queue<int>que;)\n");  
    printf("Queue 0:\n");  
        while(!que.empty())  
    {  
        printf("%3d",que.top());  
        que.pop();  
    }  
    puts("");  
    puts("");  

    printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n");  
    printf("Queue 1:\n");  
    while(!que1.empty())  
    {  
        printf("%3d",que1.top());  
        que1.pop();  
    }  
    puts("");  

    printf("Queue 2:\n");  
        while(!que2.empty())  
    {  
        printf("%3d",que2.top());  
        que2.pop();  
    }  
    puts("");  
    puts("");  

    printf("采用头文件\"functional\"内定义优先级:\n(priority_queue<int, vector<int>,greater<int>/less<int> >que;)\n");  
    printf("Queue 3:\n");  
    while(!que3.empty())  
    {  
        printf("%3d",que3.top());  
        que3.pop();  
    }  
    puts("");  

    printf("Queue 4 :\n");  
    while(!que4.empty())  
    {  
        printf("%3d",que4.top());  
        que4.pop();  
    }  
    puts("");  
    puts("");  

    printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n");  
    printf("Queue 5:\n");  
    while(!que5.empty())  
    {  
        printf("%3d",que5.top());  
        que5.pop();  
    }  
    puts("");  

    printf("Queue 6:\n");  
    while(!que6.empty())  
    {  
        printf("%3d",que6.top());  
        que6.pop();  
    }  

    return 0;  
}
#include <iostream>
#include <queue>
#include <ctime>

using namespace std;

bool myCmp( int a , int b ){

    return a%10 > b%10;
}

int main() {

    srand(time(NULL));

    // 默认的priority queue, 底层是最大堆
    priority_queue<int> pq;

    for( int i = 0 ; i < 10 ; i ++){
        int num = rand()%100;
        pq.push( num );
        cout<<"insert "<<num<<" in priority queue."<<endl;
    }

    while( !pq.empty() ){
        cout<<pq.top()<<" ";
        pq.pop();
    }

    cout<<endl<<endl;

    // 使用greater的priority queue, 底层是最小堆
    priority_queue<int, vector<int>, greater<int>> pq2;

    for( int i = 0 ; i < 10 ; i ++){
        int num = rand()%100;
        pq2.push( num );
        cout<<"insert "<<num<<" in priority queue."<<endl;
    }

    while( !pq2.empty() ){
        cout<<pq2.top()<<" ";
        pq2.pop();
    }

    cout<<endl<<endl;

    // 使用自定义Comparator的priority queue
    priority_queue<int, vector<int>, function<bool(int,int)>> pq3(myCmp);

    for( int i = 0 ; i < 10 ; i ++){
        int num = rand()%100;
        pq3.push( num );
        cout<<"insert "<<num<<" in priority queue."<<endl;
    }

    while( !pq3.empty() ){
        cout<<pq3.top()<<" ";
        pq3.pop();
    }

    return 0;
}
  • PQ in cpp defult is max-heap

  • PQ in Java defult is min-heap

results matching ""

    No results matching ""