Очередь приоритетов с указателями и компаратором C ++

Я только начал изучать C ++. Половину времени я не знаю, что я делаю, часами часами ищу в Google и слепо вставляю коды в свой проект, это может быть основным вопросом, но мне просто не кажется понять правильно.

Это требование из моего задания, мне нужно иметь эти:

в классе Edge:

public:
bool operator()(Edge*, Edge*)

в классе Graph:

private:
priority_queue<Edge*, vector<Edge*>, Edge> edges

У меня проблема с объявлением priority_queue. Подробности:

Если я использую их напрямую, класс ребер выдаст мне ошибку «должен иметь аргумент класса», я понимаю, что не могу перегрузить два указателя в оператор bool, поэтомувот что я попробовал:

в Edge.cpp:

#include "Edge.h"
using namespace std;

Edge::Edge(Vertex* s, Vertex* d, double w)
{
    source = s;
    destination = d;
    weight = w;
}

double Edge::getWeight()
{
    return weight;
}

struct CompareWeight : public std::binary_function<Edge*, Edge*, bool>
{
    bool operator()(Edge* e1,Edge* e2)
    {
        double w1 = e1->getWeight();
        double w2 = e2->getWeight();

        if(w1>w2){
            return true;
        }
        else {
            return false;
        }
    }
};

^ Я даже не уверен в правильности размещения структуры внутри класса, плюс в этом смысле я не знаю, что поместить в мой файл Edge.h.

в Edge.h:

#include "Vertex.h"
class Edge
{
    public:
        Edge(Vertex*, Vertex*, double);
        double getWeight();
        friend struct CompareWeight; // ??? does not seems right
    private:
        Vertex* source;
        Vertex* destination;
        double weight;
}

Что касается класса Graph, где настоящая проблема, я не могу даже пройти, объявляя приоритетную очередь, не получив ошибку.

в Graph.h

#include "Vertex.h"
#include "Edge.h"
#include <vector>
#include <queue>

class Graph
{
    public:
        ...

    private:
        priority_queue<Edge*, vector<Edge*>, Edge> edges
        // This give pointer error: no match for call to '(Edge) (Edge*&, Edge*&)'
}

вторая попытка:

// same as above
private:
    priority_queue<Edge*, vector<Edge*>, CompareWeight> edges
    // This give error: 'CompareWeight' not declared in this scope

Я не знаю, почему для первой ошибки, но для второй ошибки я это ясно понял, но я не знаю, как это исправить, стоит ли что-то ставить перед CompareWeight? Я много чего перепробовал, ничего не получалось.

Любая помощь будет оценена! в противном случае я бы, вероятно, просто провалил этот курс. Первый раз, спрашивая в stackoverflow, если я сделал что-то не так, пожалуйста, скажите мне.

Ответы на вопрос(2)

Ваш ответ на вопрос