gpt4 book ai didi

c++ - 扩展 std::priority_queue 功能

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:44 25 4
gpt4 key购买 nike

我想以这样一种方式实现优先级队列,即每次我推送一个新项目或从队列中弹出一个项目时,都会执行一个函数,例如将每个项目“错误”添加或减去全局“错误” ".

是否有一些巧妙的标准方法来实现这一目标?下面是一个简化的例子,我已经解决了它有一个“包装”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();
}
};

提前致谢!

最佳答案

与实际容器不同的是 container adaptors实际上被设计成可继承的。例如,如果您查看例如this std::priority_queue reference你会看到它有 protected member objects .

这意味着您可以从 std::priority_queue 继承并创建您自己的 poppush 函数,以便在调用实际的队列功能。

正如 skypack 在评论中指出的那样,函数不是 virtual,这意味着您不能对继承的类使用多态性。您不能真正将它传递给需要 std::priority_queue 的函数,代码必须明确使用您的类。

关于c++ - 扩展 std::priority_queue 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com