C ++ векторная сортировка с моей собственной функцией
Info:
Parent Class: Vehicle
Child Class : Car & Lorry
Я получил вектор, и я пытаюсь отсортировать его по возрастанию
сортировать (myVector.begin (), myVector.end (), compareByArea);
так в Vehicle.h
я сделал
class VehicleTwoD
{
private:
//some variable
public:
bool compareByArea(const VehicleTwoD,const VehicleTwoD);
}
и в Vehicle.cpp я сделал это
bool VehicleTwoD::compareByArea(const VehicleTwoD &a,const VehicleTwoD &b)
{
return a.getArea() < b.getArea();
}
Ошибка: у VehicleTwoD нет члена с именем getArea.
Он находится в моем детском автомобиле и Грузовик и двухместная площадка также объявляются у ребенка.
Но проблема в том, что если я хочу сортировать таким образом, могу ли я достичь этого с помощью виртуального, а затем я создаю тот же метод для потомка, но перегружаю его и получаю сортировку своей области таким образом
Есть ли лучший способ сделать это.
Спасибо за помощь!
Additional Info:
У меня есть эта функция getArea () в Car & Грузовик, который просто
double Car::getArea()
{ return area;}
double Lorry::getArea()
{ return area;}
Но теперь, когда у меня есть список объектов в моем векторе, каждый из них является потомком другого класса. но все получили функцию getArea, я хочу отсортировать этот вектор, который
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),compareArea);
// но сортировка не работает
Я неt знать, где создать CompareArea, которое может получитьArea () объекта 1 против объекта 2 и вернуть результат bool;
Я пытаюсь создать его в VehicleTwoD, используя этот
bool VehicleTwoD::compareByArea(const VehicleTwoD &a,const VehicleTwoD &b)
{
return a.getArea() < b.getArea();
}
Но проблема в том, что VehicleTwoD неу них есть функция getArea, они расположены у дочерних элементов. Как я должен получить это исправление. Спасибо..
Благодаря помощи:
Я попробовал следующее
template bool compareByArea(const T &a, const T &b) {
return a.getArea() < b.getArea();
}
и я заявляю об этом в файле .h,
public:
template
bool compareByArea(const T,const T);
virtual double getArea();
тогда в моем main.cpp я попробовал
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),sortVector[0].compareArea);
Это дает мне ошибку
ошибка запроса для члена compareByArea в sortVector.std :: vector <_TP, _ALLOC ....... который не относится к типу класса 'VehicleTwoD *
Если я сделаю это
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),sortVector[0].compareArea);
Я получу ошибку CompareByArea не было объявлено в этой области.
Что я должен делать? Я объявил CompareByArea в VehicleTwoD, который включен в main.cpp
VehicleTwoD является родительским классом, и я также виртуальный двойной getArea (), поэтому при вызове getArea он будет использовать дочерний getArea, потому что закрытая переменная - area является дочерней, а область возврата функции getArea () - дочерней.
Что мне делать? застрял. Спасибо!
Последнее обновление снова:
Я пытаюсь отсортировать вектор по CompareByArea, где меньшая область будет отсортирована на самом высоком уровне, а большая 1 будет внизу.
Проблема в том, что getArea является функцией Car & Lorry (дочерний класс) и я создаю this CompareByArea на main.cpp
sortVector - векторная копия транспортных средств.
Вот как я устанавливаю значение в моем транспортном средстве ...
if(vehicleType=="Car")
{
vehicletwod[arrayCount] = new Car();
vehicletwod[arrayCount].setDimension();
//set area
vehicletwod[arrayCount].setArea();
cout < "Done setting the data";
}