//优先队列的使用
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
//定义结构体,并重载运算符
typedef struct node
{
int x,y;
friend bool operator <(node n1,node n2)
{
if(n1.x==n2.x)
return n1.y<n2.y; //x相同,y大的优先
return n1.x<n2.x; //定义x大的优先(注意与快排的相反)
}
}N;
N n1;
int main()
{
priority_queue<int> q; //声明一个优先队列
int i,j,k;
//默认是大整数优先
for(i=0;i<10;i++)
q.push(i);
while(!q.empty())
{
cout<<q.top()<<" "; //使用q.top()而不是q.front()调用队首元素
q.pop();
}
cout<<endl<<endl;
//可以使用functional.h函数对象作为比较函数
//从而实现小整数优先
priority_queue<int,vector<int>,greater<int> > q1;
for(i=0;i<10;i++)
q1.push(i);
while(!q1.empty())
{
cout<<q1.top()<<" ";
q1.pop();
}
cout<<endl<<endl;
//如果要对结构体调用优先队列,则需要我们自己定义优先级了
//这可以在结构体中通过重载"<"运算符实现。
priority_queue<N>q2;
for(i=0;i<10;i++)
{
n1.x=i;n1.y=i+1;
if(i==8||i==9)
n1.x=10;
q2.push(n1);
}
while(!q2.empty())
{
n1=q2.top();
cout<<n1.x<<" "<<n1.y<<endl;
q2.pop();
}
getchar();getchar();
return 0;
}
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
//定义结构体,并重载运算符
typedef struct node
{
int x,y;
friend bool operator <(node n1,node n2)
{
if(n1.x==n2.x)
return n1.y<n2.y; //x相同,y大的优先
return n1.x<n2.x; //定义x大的优先(注意与快排的相反)
}
}N;
N n1;
int main()
{
priority_queue<int> q; //声明一个优先队列
int i,j,k;
//默认是大整数优先
for(i=0;i<10;i++)
q.push(i);
while(!q.empty())
{
cout<<q.top()<<" "; //使用q.top()而不是q.front()调用队首元素
q.pop();
}
cout<<endl<<endl;
//可以使用functional.h函数对象作为比较函数
//从而实现小整数优先
priority_queue<int,vector<int>,greater<int> > q1;
for(i=0;i<10;i++)
q1.push(i);
while(!q1.empty())
{
cout<<q1.top()<<" ";
q1.pop();
}
cout<<endl<<endl;
//如果要对结构体调用优先队列,则需要我们自己定义优先级了
//这可以在结构体中通过重载"<"运算符实现。
priority_queue<N>q2;
for(i=0;i<10;i++)
{
n1.x=i;n1.y=i+1;
if(i==8||i==9)
n1.x=10;
q2.push(n1);
}
while(!q2.empty())
{
n1=q2.top();
cout<<n1.x<<" "<<n1.y<<endl;
q2.pop();
}
getchar();getchar();
return 0;
}