gpt4 book ai didi

c++ - 在构造函数中插入 priority_queue

转载 作者:行者123 更新时间:2023-11-30 02:52:34 25 4
gpt4 key购买 nike

我想创建一个名为 Edge 的对象,它从其构造函数将自身插入到 priority_queue 中。也就是;

Class Edge {
int m_from;
int m_to;
int m_cost;
public:
edge(from, to, cost) : m_from(from), m_to(to), m_cost(cost) {
edges.push(this);
}

困难是常见的先有鸡还是先有蛋的问题。 edges 是 Edge 的 priority_queue,所以它需要知道 Edge 是什么。另外,它需要为 Edges 重载 less-than 运算符,因此在我可以实例化优先级队列之前需要定义该运算符,但由于尚未定义 Edge,因此无法定义它。我尝试了很多不同的方法,但没有任何效果。当然,我也可以在调用构造函数的代码中直接push Edge,

edges.push(Edge(from,to,cost));

但似乎应该有一种方法来强制执行此操作。基本上,我是说这些对象在创建时需要进入 priority_queue,所以让我们保证这会发生。

最佳答案

/* In .h*/

class Edge {
int m_from;
int m_to;
int m_cost;
static priority_queue<Edge*> edges;
public:
Edge(from, to, cost) : m_from(from), m_to(to), m_cost(cost) {
edges.push(this);
}
}

bool operator < (const Edge* first, const Edge* second) { return first->m_cost < second->m_cost; }

/*In .cpp */
priority_queue<Edge*> Edge::edges;

关于c++ - 在构造函数中插入 priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18748526/

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