C ++ como ordenar uma variável de array [fechado]
Eu tenho uma chamada de classe pai
Shape
Forma tem 2 chamada de criança
Square and Rectangle
A classe Shape recebeu uma área de chamada variável, que é do tipo int
Então eu criei um 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;
}
}
Eu tento classificar por área ascendente, mas não funciona. nenhuma mudança de posição, a área ainda está na mesma sequência.
Obrigado por toda ajuda!
Atualizar:
Eu fiz as seguintes alterações no Shape.cpp
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
Então no main.cpp eu fiz isso
std::sort(shaped, shaped + 3, orderByArea);
no entanto, recebo um erro, orderByArea não foi declarado neste escopo.
Outra coisa que eu tentei foi: Para classificar usando o vetor
Em Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
No 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;
}
Mas nada parece classificado. Eu tento fazer uma impressão sua posição é a mesma.
Atualizações: está consertado agora. o tipo está funcionando. Graças aos especialistas!
Eu tenho outra pergunta é
Forma em forma [100];
Como faço para copiar o valor de
Shape *shaped[100];
para dentro
vector<Shape> myVector;
ao invés de
vector<Shape*> myVector;
então eu posso usar o tipo normal de objeto.