【学习笔记】关于优先队列 Priority_queue

优先队列这个名字,顾名思义就是在队列中的元素是有优先级的。队列首部元素是队列中优先级最高的元素。

对于整形,实型,字符型等等是一样的:

///整形优先队列,按照从小到大排序:测试可输入任意五个整数。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    int i,a;
    priority_queue<int,vector<int>,greater<int> >qu;
    for(i=0;i<5;i++)
    {
        cin >>a;
        qu.push(a);
    }
    for(i=0;i<5;i++)
    {
        cout << qu.top()<<endl;
        qu.pop();
    }
}

在结构体中,我们可以这样写:

///整形优先队列,按照从小到大排序:测试可输入任意五个坐标,按x的大小排序,如果x相 
///等则按y从大到小排序,这是重新定义“<”实现的。  
#include <iostream>
#include <queue>   
using namespace std;
struct num
{
    int x,y;
     friend bo l operator < (num n1,num n2)
     {
         if(n1.x==n2.x)
         {
             return n1.y<n2.y;
         }
         else
         {
             return n2.x<n1.x;
         }

     }

};
int main()
{
    priority_queue <num,vector<num>,greater<num> >qu;
    int i;
    num a;
    for(i=0;i<5;i++)
    {
        cin >>a.x>>a.y;
        qu.push(a);
    }
    for(i=0;i<5;i++)
    {
        cout << qu.top().x<<' '<< qu.top().y<<endl;
        qu.pop();
    }
    return 0;
}

强调的是如果你只对结构体重定义了“<”,那么你只能用比较函数greater,less是用不了的。

当然相反的,如果你只对结构体重定义了">",那么就相反了。


posted @ 2013-08-01 16:02  、小呆  阅读(163)  评论(0编辑  收藏  举报