Я реализую алгоритм Дейкстры и хотел бы использовать «priority_queue» STL для ускорения процесса кодирования, но, как это часто бывает с моими попытками кодирования на C++, мое непонимание языка замедляет меня. Я нашел этот пример по адресу http://www.cplusplus.com/reference/stl/priority_queue/priority_queue/, но не понимаю, что делает следующее:
// constructing priority queues
#include <iostream>
#include <queue>
using namespace std;
class mycomparison
{
bool reverse;
public:
mycomparison(const bool& revparam=false)
{reverse=revparam;}
bool operator() (const int& lhs, const int&rhs) const
{
if (reverse) return (lhs>rhs);
else return (lhs<rhs);
}
};
int main ()
{
int myints[]= {10,60,50,20};
priority_queue<int> first;
priority_queue<int> second (myints,myints+4);
priority_queue< int, vector<int>, greater<int> > third (myints,myints+4);
// using mycomparison:
priority_queue< int, vector<int>, mycomparison > fourth;
typedef priority_queue<int,vector<int>,mycomparison> mypq_type;
mypq_type fifth (mycomparison());
mypq_type sixth (mycomparison(true));
return 0;
}
Чтобы быть более конкретным, меня сбивает с толку «bool operator() (const int& lhs, const int&rhs) const». В остальном меня все устраивает. Я думаю, что это перегрузка оператора, но «оператор ()» не имеет для меня смысла. Любая помощь будет оценена по достоинству.