C ++ jak sortować zmienną tablicową [zamknięte]
Mam połączenie klasy macierzystej
Shape
Kształt dostał 2 wezwania dziecka
Square and Rectangle
Klasa Shape ma zmienny obszar wywołania, który jest typu int
Stworzyłem więc obiekt Square, Rectangle w ten sposób
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;
}
}
Staram się sortować według rosnącego obszaru, ale to nie działa. bez zmiany pozycji, obszar nadal w tej samej kolejności.
Dzięki za pomoc!
Aktualizacja:
Zrobiłem następujące zmiany w Shape.cpp
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
Następnie w main.cpp zrobiłem to
std::sort(shaped, shaped + 3, orderByArea);
jednak pojawia się błąd, orderByArea nie została zadeklarowana w tym zakresie.
Inną rzeczą, którą próbowałem, była: Aby posortować za pomocą wektora
W Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
W 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;
}
Ale nic nie wydaje się posortowane. Próbuję wydrukować jego pozycję jest taka sama.
Aktualizacje: Naprawiono teraz. sort działa. Dzięki ekspertom!
Mam jeszcze jedno pytanie
Kształt * w kształcie [100];
Jak skopiować wartość
Shape *shaped[100];
w
vector<Shape> myVector;
zamiast
vector<Shape*> myVector;
więc mogę używać zwykłego sortowania obiektów.