Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问优先级队列中的10个最大数字_C++_List_Priority Queue - Fatal编程技术网

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

C++ 如何访问优先级队列中的10个最大数字,c++,list,priority-queue,C++,List,Priority Queue,假设在优先级队列中有30个随机数,如何在对它们排序后只访问特定数量的最大值。例如,我需要打印优先级队列中的前10个最大数字,这样您就可以将所有随机数都放入队列:ok。然后,您可以访问排名靠前的号码,并在继续时将其从列表中删除: const int desired_numbers = 10; for(int i=0; i<desired_numbers; i++) { int t = mypq_decreasing.top(); mypq_decreasing.pop();

假设在优先级队列中有30个随机数,如何在对它们排序后只访问特定数量的最大值。例如,我需要打印优先级队列中的前10个最大数字,这样您就可以将所有随机数都放入队列:ok。然后,您可以访问排名靠前的号码,并在继续时将其从列表中删除:

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
}
const int所需数量=10;

对于(int i=0;i如果我正确理解您的问题,您希望通过优先级队列访问大小为30的列表中的X个最大数字,您可以这样做

template<typename T>
struct my_less;
//Specialization in order to dereference a pointer before doing the comparison
template<typename T>
struct my_less<T*>
{
  void operator (T* lhs, T* rhs){
   return (*lhs)<(*rhs);
  }
}
using lookupPriorityQueue=std::priority_queue<int*,std::vector<int*>,my_less<int*>>;
lookupPriorityQueue p;
for(auto& element: your_list_of_ints)
{
   p.push(&element);
}
for(auto i=0;i!=10;++i,p.pop())
{
  std::cout<<*(p.top())<<"\n";
}
模板
构建我的未来;
//专门化,以便在进行比较之前取消对指针的引用
模板
构造我的\u less
{
无效运算符(T*lhs,T*rhs){

return(*lhs)似乎您不需要
优先级队列
,只需使用算法:

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] << " ";
}
std::向量数/*=*/;
std::partial_排序(numbers.begin(),numbers.begin()+10,std::greater());
对于(标准::尺寸i=0;i!=10;++i)
{

std::cout似乎是一个奇怪的优先级队列,如果你要忽略优先顺序上的FIFO,并从中提取最高的33%值。为什么不将数字作为优先级?也许我不理解这个问题,但你可以从优先级队列中提取10个数字,然后按降序排序(假设它是一个最大队列)。我编辑了这个问题,把“调用”改为“Access”。这是正确的吗?(如果没有,请随意修理)。问题是,你不能在C++中“调用”一个数字,只能调用函数(和函数之类的东西)。@CaiusJard我该怎么做?有密码吗help@MartinBonner事实上,我必须先将它们存储在一个列表中,然后使用优先级队列访问它们,以获得前10个最大的数字。那么,你知道怎么做吗?不,实际上我需要从优先级队列中获取10个数字,而不是从另一个列表中获取一旦你访问了队列的顶部,返回的int值最大。要访问下一个int值,必须弹出(即从队列中删除)您只需读取顶部,然后再次读取顶部。然后弹出,然后读取,依此类推。最后,您无法读取从队列中删除的元素,这就是为什么我建议在读取和弹出它们时将它们保存在列表中。但假设我的问题是:使用优先级队列,取出并打印列表中最大的10个数字。然后再次打印列表这五个数字已经被去掉了。我如何再次打印相同的列表,但没有分开的10个数字?它可以打印所有元素吗?我如何将你的代码/你的部分代码与我的原始代码一起使用?对不起,我是一个初学者如何将你的代码/你的部分代码与我的原始代码一起使用?对不起,我是一个初学者令人担忧的是,我的任务是:创建一个大小为30的列表,并用0到99之间的随机数填充。删除所有重复的数字,然后打印生成的整数列表。使用优先级队列,取出并打印列表中最大的10个数。取出5个数字后再次打印列表。