C ++, как сортировать переменную массива [закрыто]
Я получил вызов родительского класса
Shape
Shape получил 2 детских звонка
Square and Rectangle
Класс Shape получил переменную область вызова, которая имеет тип int
Итак, я создал некоторый объект Square, Rectangle, как это
int main()
{
Shape *shaped[100];
//then i did some adding of object..
int areaValue;
areaValue=1;
shaped[0] = new Rectangle();
shaped[0]->setArea(areaValue);
areaValue=7;
shaped[1] = new Square();
shaped[1]->setArea(areaValue);
areaValue=5;
shaped[2] = new Square();
shaped[2]->setArea(areaValue);
shapeCounter = 3;
sort(shaped[0],shaped[2]);
for (int i=0;i<shapeCounter;i++)
{
cout << shaped[i].getArea() << endl;
}
}
Я пытаюсь сортировать по возрастанию, но это не работает. без изменения положения, область все еще в той же последовательности.
Спасибо за помощь!
Обновить:
Я сделал следующие изменения в Shape.cpp
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
Затем на main.cpp я сделал это
std::sort(shaped, shaped + 3, orderByArea);
однако я получаю ошибку, orderByArea не был объявлен в этой области.
Еще одна вещь, которую я попробовал, была: Сортировать используя вектор
На Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
На main.cpp
vector<ShapeTwoD*> sortVector;
sortVector.clear();
sortVector.assign(shaped,shaped + shapeCounter);
sort(sortVector.begin(),sortVector.end());
for(int i=0;i<shapeCounter;i++)
{
cout << sortVector[i].toDisplay() << endl;
}
Но, похоже, ничего не отсортировано. Я стараюсь сделать распечатку, ее позиция такая же.
Обновления: исправлено. сортировка работает. Спасибо экспертам!
У меня есть еще один вопрос
Форма * в форме [100];
Как мне скопировать значение
Shape *shaped[100];
в
vector<Shape> myVector;
вместо
vector<Shape*> myVector;
так что я могу использовать обычную сортировку объектов.