C ++ cómo ordenar una variable de matriz [cerrado]
Recibí una llamada de clase de padres
Shape
Forma tiene llamada de 2 niños
Square and Rectangle
La clase de forma tiene un área de llamada variable, que es de tipo int
Así que creé un objeto de Square, Rectangle como este.
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;
}
}
Intento ordenar por área ascendente pero no funciona. Sin cambio de posición, el área sigue en la misma secuencia.
Gracias por toda la ayuda!
Actualizar:
Hice los siguientes cambios en Shape.cpp
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
Entonces en main.cpp hice esto
std::sort(shaped, shaped + 3, orderByArea);
sin embargo recibo un error, orderByArea no fue declarado en este alcance.
Otra cosa que probé fue: Ordenar utilizando vector
En Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
En 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;
}
Pero nada parece solucionado. Intento hacer una impresión de su posición es la misma.
Actualizaciones: Está arreglado ahora. La clase está funcionando. Gracias a los expertos!
Tengo otra pregunta es
Forma * en forma [100];
¿Cómo copio el valor de
Shape *shaped[100];
dentro
vector<Shape> myVector;
en lugar de
vector<Shape*> myVector;
así que puedo usar el tipo de objeto normal.