我想實現一個優先級隊列,每當我推入一個新項目或從隊列中彈出一個項目時,就會執行一個函數,例如添加或減去每個項目「錯誤「到全局」錯誤「。擴展std :: priority_queue的功能
是否有一些整潔的標準的方式來實現這一目標?下面是一個簡單的例子,我已經解決了它有一個「包裝」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();
}
};
在此先感謝!
這應該被髮布到[codereview.se]。 –
@BartekBanachewicz CR.SE需要一個完整的工作示例。我認爲這個問題是可以的。 – NathanOliver