C ++ wie man eine Array-Variable sortiert [closed]
Ich habe einen Elternklassenanruf bekommen
Shape
Shape hat 2 Kinder angerufen
Square and Rectangle
Die Shape-Klasse hat einen variablen Aufrufbereich vom Typ int
Also habe ich ein Objekt von Square, Rectangle wie dieses erstellt
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;
}
}
Ich versuche nach aufsteigendem Gebiet zu sortieren, aber es funktioniert nicht. Keine Positionsänderung, der Bereich bleibt in der gleichen Reihenfolge.
Danke für alle Hilfe!
Aktualisieren:
Ich habe die folgenden Änderungen an Shape.cpp vorgenommen
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
Dann habe ich das bei main.cpp gemacht
std::sort(shaped, shaped + 3, orderByArea);
Ich erhalte jedoch eine Fehlermeldung, orderByArea wurde in diesem Bereich nicht deklariert.
Eine andere Sache, die ich versuchte, war: Nach Vektor sortieren
Bei Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
Auf 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;
}
Aber nichts scheint sortiert zu sein. Ich versuche, einen Ausdruck zu machen, dessen Position gleich ist.
Updates: Es ist jetzt behoben. Art funktioniert. Vielen Dank an die Experten!
Ich habe noch eine Frage
Form * geformt [100];
Wie kopiere ich den Wert von
Shape *shaped[100];
in
vector<Shape> myVector;
anstatt
vector<Shape*> myVector;
So kann ich die normale Objektsortierung verwenden.