比较对象的代码实际上如何工作?

时间:2019-06-16 15:47:11

标签: c++

我正在学习dijkstra的算法,然后有了min_heap实现的优先级队列的概念,其中我的priority_queue <Node,vector<Node>,comp> min_heap和comp是一个比较结构;

struct Edge{
    int src;
    int dest;
    int weight;
};

struct Node{
    int vertex;
    int weight;
};

class Graph{
    public:
    vector<vector<Edge>> adjList;
    Graph(vector<Edge> &edges,int N){
        adjList.resize(N);
        for(auto &edge:edges){
            adjList[edge.src].push_back(edge);
        }
    }
};

struct comp{
    bool operator()(const Node &lhs,const Node &rhs) const{
        return lhs.weight>rhs.weight;
    }
};

void dij(Graph g,int source,int N){
    priority_queue<Node,vector<Node>,comp> min_heap;
    min_heap.push({source,0});
    vector<int> dist(N,INT_MAX);
    dist[source] = 0;
    vector<bool> done(N,false);
    done[0] = true;
    while(!min_heap.empty()){
        Node node = min_heap.top();
        min_heap.pop();
        int u = node.vertex;
        for(auto i:g.adjList[u]){
            int v = i.dest;
            int weight = i.weight;
            if(!done[u] && dist[u]+weight<dist[v]){
                dist[v] = dist[u] + weight;
                min_heap.push({v,dist[v]});
            }
        }
        done[u] = true;
    }
    cout<<"The path from vertex "<<source<<" to "<<N<<" is "<<dist[N];
}

代码可以正常工作并打印最低成本,但我不理解struct comp();。以及它是如何工作的。

0 个答案:

没有答案