我正按照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.