目录
一、优先级队列简述
二、优先级队列的大堆、小堆(仿函数控制)
三、优先级队列与sort函数中仿函数区别
四、优先级队列的接口
一、优先级队列简述
priority_queue是一个类模板
二、优先级队列的大堆、小堆(仿函数控制)
priority_queue类似于堆,而且默认为大堆(即数据大的优先级高)
void priority_queue_test()
{
priority_queue<int,vector<int>,greater<int>> pq;
pq.push(3);
pq.push(5);
pq.push(2);
pq.push(4);
pq.push(1);
pq.push(6);
while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}
}
//6 5 4 3 2 1
还可以利用仿函数,将priority_queue改为小堆
void priority_queue_test()
{
priority_queue<int,vector<int>,greater<int>> pq;
pq.push(3);
pq.push(5);
pq.push(2);
pq.push(4);
pq.push(1);
pq.push(6);
while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}
}
//1 2 3 4 5 6
三、优先级队列与sort函数中仿函数区别
不同于排序函数sort,sort是一个函数模板,也可以通过仿函数来确定是升序排序还是降序排序
sort在传函数参数时,参数为一个对象,函数模板会通过该对象自动推演出类型,而priority_queue参数只能为一个类型
即函数模板可以隐式实例化或显式实例化,而类模板只能显式实例化
详情见文章:C++中的模板-CSDN博客
vector<int> v = { 2,5,1,7,3,9,4,6,8 };
sort(v.begin(), v.end());
for (auto e : v) cout << e << " ";//1 2 3 4 5 6 7 8 9
cout << endl;
sort(v.begin(), v.end(), greater<int>());//匿名对象
for (auto e : v) cout << e << " ";//9 8 7 6 5 4 3 2 1
cout << endl;
四、优先级队列的接口
官方文档链接:priority_queue - C++ Reference (cplusplus.com)