我想创建一个名为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是Edges的priority_queue,因此需要知道Edge是什么。另外,它需要让运算符少于Edges的重载,因此在我可以实例化优先级队列之前需要定义运算符,但是由于尚未定义Edge,因此无法定义它。我尝试了很多不同的方法,但没有任何作用。当然,我可以在调用构造函数的代码中推送Edge,
edges.push(Edge(from,to,cost));
但似乎应该有办法强制执行此操作。基本上,我说这些对象需要在创建时继续使用priority_queue,所以让我们保证会发生这种情况。
答案 0 :(得分:3)
/* 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;