Очередь приоритетов с указателями и компаратором 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, если я сделал что-то не так, пожалуйста, скажите мне.