假设我的优先级队列中有30个随机数,我在排序后如何只访问特定数量的最大值。例如,我需要打印优先队列中前10位最大的数字
答案 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] << " ";
}