1

我想制作一个名为 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);
}

困难是通常的鸡与蛋的问题。边是边的一个priority_queue,所以它需要知道边是什么。另外,它需要为 Edges 重载运算符,因此需要先定义运算符,然后才能实例化优先级队列,但由于尚未定义 Edge,因此无法定义它。我已经尝试了很多不同的方法,但没有任何效果。当然,我可以只在调用构造函数的代码中推送 Edge,

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

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

4

1 回答 1

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;
于 2013-09-11T18:31:52.923 回答