C ++ - 如何在Class中的优先级队列中使用比较器

时间:2014-12-07 04:41:29

标签: c++11 priority-queue

我正按照Cormen的书写一个Dijsktra程序。在这里,我有一个 Graph 类,它有一个方法 dijsktra 。我需要在此方法中使用优先级队列 Q 。有两个数组short []和pred []。此 Q 应根据最短的[]值对顶点进行排序。
每个节点都表示为int。

我在使用比较器声明优先级队列时遇到错误。
非常感谢任何帮助。

class Graph {
private:
    vector<int> vertex;
    map<int, vector<int> > adjlist;
    int *shortest,*pred;
public:
    Graph(int V){
        fore(i,V) { vertex.pb(i); }
        shortest = new int[V];
        pred = new int[V];
    }
    struct Comp {                     // Error!
        Comp(Graph& g): graph(g){     // Error!
        }
        Graph& graph;
        bool operator()(int i1, int i2) {
            return graph->shortest[i1] > graph->shortest[i2];
        }
    };
    Comp comp;
    void dijsktra(int s);
 };
    void Graph::dijsktra(int s) {
        int n = vertex.size();
        fore(i,n) {
            shortest[i] = 99;
            pred[i] = 0;
        }
        shortest[s] = 0;

        priority_queue<int,vector<int>, Comp> Q(comp); // Error!

    }

[编辑] 试过各种方法。我认为错误在于添加比较器 错误:

dag.cpp: In constructor ‘Graph::Graph(int)’:
dag.cpp:15:14: error: no matching function for call to ‘Graph::Comp::Comp()’
  Graph(int V){
              ^
dag.cpp:15:14: note: candidates are:
dag.cpp:21:3: note: Graph::Comp::Comp(Graph&)
   Comp(Graph& g): graph(g){
   ^
dag.cpp:21:3: note:   candidate expects 1 argument, 0 provided
dag.cpp:20:9: note: constexpr Graph::Comp::Comp(const Graph::Comp&)
  struct Comp {
         ^
dag.cpp:20:9: note:   candidate expects 1 argument, 0 provided
dag.cpp:20:9: note: constexpr Graph::Comp::Comp(Graph::Comp&&)
dag.cpp:20:9: note:   candidate expects 1 argument, 0 provided
Compilation failed.

0 个答案:

没有答案