C++模板库STL——priority_queue

优先队列,在优先队列中,队首元素一定是当前队列中优先级最高的那个
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;
}
发布了120 篇原创文章 · 获赞 3 · 访问量 2867

猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/104092535