【学习笔记】关于优先队列 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是用不了的。
当然相反的,如果你只对结构体重定义了">",那么就相反了。