如何访问优先级队列中的10个最大数字

时间:2017-11-29 12:41:34

标签: c++ list priority-queue

假设我的优先级队列中有30个随机数,我在排序后如何只访问特定数量的最大值。例如,我需要打印优先队列中前10位最大的数字

2 个答案:

答案 0 :(得分:0)

所以你将所有随机数推入队列:好的。然后您访问最顶层的数字,当您离开时,将其从列表中删除:

const int desired_numbers = 10;
for(int i=0; i<desired_numbers; i++)
{
    int t = mypq_decreasing.top();
    mypq_decreasing.pop();

    mylist.remove(t); //remove from original list
}

在此之后,队列和列表都包含所有随机数,但是包含10个(因为在每次访问top之后,您都会从队列中弹出顶部并从列表中删除元素)。

答案 1 :(得分:0)

您似乎不需要priority_queue,只需使用算法:

std::vector<int> numbers /*= */;

std::partial_sort(numbers.begin(), numbers.begin() + 10, std::greater<>());

for (std::size_t i = 0; i != 10; ++i)
{
    std::cout << numbers[i] << " ";
}