【发布时间】:2016-04-25 12:18:38
【问题描述】:
我想以这样的方式实现一个优先级队列,每次我推送一个新项目或从队列中弹出一个项目时,都会执行一个函数,例如将每个项目“错误”添加或减去全局“错误” ”。
有没有一些简洁的标准方法来实现这一点?下面是一个简化的例子,我已经解决了它有一个“包装”std::priority_queue 的结构。我是一名新手 C++ 程序员,因此我不确定这是否是最有效的解决方案。
#include <queue>
struct myStruct {
double Error;
friend bool operator<(const myStruct& lhs, const myStruct& rhs)
{
return lhs.Error < rhs.Error;
}
};
typedef std::priority_queue < myStruct, std::vector<myStruct>, std::less<myStruct>> StdQueue;
struct priorityQueue {
priorityQueue() { Error = 0; }
StdQueue queue;
double Error;
void push(myStruct s)
{
Error += s.Error;
queue.push(s);
}
void pop()
{
Error -= queue.top().Error;
queue.pop();
}
};
提前致谢!
【问题讨论】:
-
这应该发布到Code Review。
-
@BartekBanachewicz CR.SE 需要一个完整的工作示例。我认为这个问题在 SO 上是可以的。