这是一个比较器的程序,我应该以优先级队列为基础。
#ifndef COMPARATOR_H
#define COMPARATOR_H
#include "Point.h"
class mycomparison
{
Point dest;
public:
mycomparison(Point *d)
{
dest.setRow(d->getRow());
dest.setColumn(d->getColumn());
}
bool operator() (const Point& lhs, const Point& rhs) const
{
return (lhs.distanceFrom(dest) > rhs.distanceFrom(dest));
}
};
#endif
也就是说,点的对象dest包含值距离,二进制最小堆的数组成员相应地进行比较和排序。
我需要知道这个函数bool operator()(const Point& lhs,const Point& rhs)const是如何工作的?我知道它需要两个对象并比较它们返回true或false。但我无法制定函数调用。我一直收到错误:
在成员函数'virtual void PriorityQueueArray :: push(const Point&)'中:PriorityQueueArray.cpp:57:17:错误:在'('token
之前的预期类型说明符这是我的函数调用以及所需的头文件。
#include "PriorityQueueADT.h"
#include "comparator.h"
#include "Point.h"
#include <iostream>
using namespace std;
class PriorityQueueArray : public PriorityQueueADT {
private:
Point *Array;
Point *P;
int siz;
int num;
public:
PriorityQueueArray(Point *destination);
void push (const Point& val);
bool empty();
Point top();
void pop();
int size();
};
void PriorityQueueArray::push (const Point& val)
{
mycomparison M(P);
Point temp;
if(empty()){
num=1;
Array[num]=val;
}
else{
if(num==siz-1){
Point *Arr=new Point[2*siz];
for(int i=1; i<siz; i++)
Arr[i]=Array[i];
Array=Arr; siz=2*siz;
}
num++;
Array[num]=val;
if(num==2){
if(M.operator(Array[2], Array[1])){
temp=Array[2];
Array[2]=Array[1];
Array[1]=temp;
}
}
else{
int j=num;
while(j>1){
if(M.operator (Array[j], Array[j/2])){
temp=Array[j];
Array[j]=Array[j/2];
Array[j/2]=temp;
j=j/2;
}
}
}
}
return;
}
我只需要知道对operator()的函数调用的语法。