admin管理员组

文章数量:1623784

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();
    }
}

本文标签: 队列定义大小priorityqueue