Cola prioritaria con punteros y comparador C ++

Recién comencé a aprender C ++. La mitad del tiempo no sé qué estoy haciendo, paso horas y horas buscando en Google y pongo códigos a ciegas dentro de mi proyecto, esta podría ser una pregunta básica, pero parece que no puedo entenderlo bien.

Este es el requisito de mi tarea, necesito tener estos:

en la clase Edge:

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

en la clase Graph:

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

Tengo problemas para declarar la prioridad_queue. Detalles:

Si los uso directamente, la clase de borde me dará un error de "debe tener un argumento de clase", entiendo que no puedo sobrecargar dos punteros en el operador bool, así queEsto es lo que he intentado:

en el 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;
        }
    }
};

^ Ni siquiera estoy seguro de si poner struct dentro de la clase es correcto o no, además, en esta causa, no sé qué poner dentro de mi archivo Edge.h.

en el borde.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;
}

En cuanto a la clase Graph es donde está el verdadero problema, ni siquiera puedo pasar la declaración de la cola de prioridad sin obtener un error.

en el 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*&)'
}

segundo intento:

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

No sé por qué para el primer error, pero el segundo error lo entendí claramente, pero no sé cómo solucionarlo, ¿debería poner algo delante de CompareWeight? Intenté muchas cosas, nada funciona.

¡Cualquier ayuda será apreciada! de lo contrario, probablemente reprobaría este curso. La primera vez que pregunto en stackoverflow, si hice algo mal, dígamelo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta