Prioritätswarteschlange mit Zeigern und Comparator C ++

Ich habe gerade angefangen, C ++ zu lernen. Die Hälfte der Zeit, in der ich nicht weiß, was ich tue, stundenlang auf Google suche und blind Code in mein Projekt einbinde, mag eine grundlegende Frage sein, aber ich kann es einfach nicht um es richtig zu machen.

Das ist die Voraussetzung Für meine Aufgabe brauche ich Folgendes:

in der Edge-Klasse:

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

in der Graph-Klasse:

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

Ich habe ein Problem beim Deklarieren der priority_queue. Einzelheiten:

Wenn ich diese direkt verwende, gibt mir die Edge-Klasse den Fehler "Muss ein Argument der Klasse haben". Ich verstehe, dass ich nicht zwei Zeiger in den Bool-Operator überladen kanndas habe ich versucht:

in der 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;
        }
    }
};

^ Ich bin mir nicht sicher, ob die Struktur in der Klasse korrekt ist oder nicht. Außerdem weiß ich in diesem Fall nicht, was ich in meine Edge.h-Datei einfügen soll.

in der 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;
}

Da in der Graph-Klasse das eigentliche Problem liegt, kann ich nicht einmal die Prioritätswarteschlange deklarieren, ohne einen Fehler zu erhalten.

in der 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*&)'
}

zweiter Versuch:

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

Ich weiß nicht warum für den ersten Fehler, aber den zweiten Fehler habe ich klar verstanden, aber ich weiß nicht, wie ich ihn beheben soll, sollte ich etwas vor CompareWeight stellen? Ich habe viele Dinge ausprobiert, nichts funktioniert.

Jede Hilfe wird sehr geschätzt! sonst würde ich diesen kurs wohl einfach nicht bestehen. Wenn ich zum ersten Mal im Stackoverflow gefragt werde, ob ich etwas falsch gemacht habe, sag es mir bitte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage