优先队列,在优先队列中,队首元素一定是当前队列中优先级最高的那个
0、访问
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
priority_queue<int>q;
q.push(3);
q.push(4);
q.push(1);
printf("%d\n",q.top());
return 0;
}
1、函数
pop()
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
priority_queue<int>q;
q.push(3);
q.push(4);
q.push(1);
printf("%d\n",q.top());
q.pop();//令队首元素出队
printf("%d\n",q.top());
return 0;
}
empty()
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
priority_queue<int>q;
if(q.empty() == true){
printf("Empty\n");
}
else{
printf("Not Empty\n");
}
q.push(1);
if(q.empty() == true){
printf("Empty\n");
}
else{
printf("Not Empty\n");
}
return 0;
}
size()
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
priority_queue<int>q;
q.push(3);
q.push(4);
q.push(1);
printf("%d\n",q.size());
return 0;
}
优先级设置:
less表示数字越大优先级越大
greater表示数字越小优先级越大
注意最后两个> >中间有空格
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> >q;//此处要空开一个空格
q.push(3);
q.push(4);
q.push(1);
printf("%d\n",q.top());
return 0;
}
结构体中定义优先级
#include <iostream>
#include <string>
#include <queue>
using namespace std;
struct fruit{
string name;
int price;
friend bool operator<(fruit f1,fruit f2){
return f1.price>f2.price;//以价格低的水果优先级高
/* return f1.price>f2.price;//以价格高的水果优先级高 */
}
}f1,f2,f3;
int main(){
priority_queue<fruit>q;
f1.name = "桃子";
f1.price = 3;
f2.name = "梨子";
f2.price = 4;
f3.name = "苹果";
f3.price = 1;
q.push(f1);
q.push(f2);
q.push(f3);
cout<<q.top().name<<" "<<q.top().price<<endl;
return 0;
}
优先级定义写在结构体外面的,注意比较与上面的不同:
#include <iostream>
#include <string>
#include <queue>
using namespace std;
struct fruit{
string name;
int price;
}f1,f2,f3;
//在结构体外面定义排序
struct cmp{
bool operator()(fruit f1,fruit f2){
return f1.price>f2.price;
}
};
int main(){
priority_queue<fruit,vector<fruit>,cmp>q;//这种定义方式,相当于自定义
f1.name = "桃子";
f1.price = 3;
f2.name = "梨子";
f2.price = 4;
f3.name = "苹果";
f3.price = 1;
q.push(f1);
q.push(f2);
q.push(f3);
cout<<q.top().name<<" "<<q.top().price<<endl;
return 0;
}