gpt4 book ai didi

c++ - 通过引用传递自定义优先级队列

转载 作者:行者123 更新时间:2023-11-28 05:38:04 26 4
gpt4 key购买 nike

我无法传递(自定义)priority_queue 引用。优先级队列是使用 lambda 定制的。有什么解决方法吗?我尝试使用仿函数和所有这些,但没有一个会让我完全超越 priority_queue 创建的界限,而不会在编译步骤中因 priority_queue 构造函数不接受排序方法的各种问题而失败。我猜它无法到达 lambda 或者它只需要在 header 中进行一些特殊的类型声明,但我无法弄清楚

这是我的代码的简化版本。

#include <queue>
#include <memory>

struct Node
{
int full_dist,
dist1,
dist2;

Node(int d1, int d2) { full_dist = d1 + d2; }
};

void some_processing(std::priority_queue<std::shared_ptr<Node>>& nodes)
{
//something being done with the queue
}

int main()
{
auto comp = [] (const std::shared_ptr<Node>& l, const std::shared_ptr<Node> r) -> bool
{ return l->full_dist > r->full_dist; };

std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>>, decltype(comp)> nodes(comp);
some_processing(nodes);//breaks here
}

这是我在这个例子中遇到的错误:

test.cpp:24:24: error: invalid initialization of reference of type ‘std::priority_queue<std::shared_ptr<Node> >&’ 
from expression of type ‘std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>, std::allocator<std::shared_ptr<Node> > >, main()::__lambda0>’
some_processing(nodes);

最佳答案

将函数模板化为比较类型。

template<typename CompT>
void some_processing(
std::priority_queue<std::shared_ptr<Node>,
std::vector<std::shared_ptr<Node>>,
CompT> & nodes)
{
// something being done with the queue
}

或者保持简单,将整个容器类型模板化。

template<typename QueueT>
void some_processing(QueueT& nodes)
{
// something being done with the queue
}

关于c++ - 通过引用传递自定义优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769862/

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