1.
代码如下(示例):
priority_queue < int >默认构建的是一个大根堆,所以每次从头取数据得到的是一个从大到小的队列排序.
priority_queue< int> 实际上等价于 priority_queue<int, vector, less< int>>。
#include <iostream>
#include <queue>
using namespace std;
void common_sort()
{
int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
// 默认大根堆,实现由大到小排序
priority_queue<int> q;
for (auto n : source_data)
q.push(n);
while (!q.empty())
{
cout << q.top() << endl;
q.pop();
}
}
2.
小根堆: priority_queue<int, vector< int>, greater< int>> q;
代码如下(示例):
#include <iostream>
#include <queue>
using namespace std;
void max_k_num()
{
int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
int k = 5;
// 小根堆
priority_queue<int, vector<int>, greater<int>> q;
for (auto n : source_data)
{
if (q.size() == k)
{
if (n > q.top())
{
q.pop();
q.push(n);
}
}
else
q.push(n);
}
while (!q.empty())
{
cout << q.top() << endl;
q.pop();
}
}