对 C++ 中的对象输入数组进行排序

Sorting an input array of objects in C++

本文关键字:数组 排序 输入 对象 C++      更新时间:2023-10-16

我有一个基类Shape,以及其他派生类CircleSquareTriangle。我创建了三个基类指针的向量。

vector < Shape * > shapes( 3 );
shapes[ 0 ] = &C1; //Circle C1;
shapes[ 1 ] = &S1; //Square S1;
shapes[ 2 ] = &T1; //Triangle T1;

之后,我使用loop调用virtualViaPointer(),该将调用虚函数draw()

for (size_t i = 0; i < shapes.size(); ++i) {
    cout << endl;
    virtualViaPointer( shapes[ i ] );
}
void virtualViaPointer(const Shape * const baseClassPtr)
{
baseClassPtr->draw();
}

每个派生类都有一个函数getArea(),用于计算每个形状的面积并返回结果。

现在,我想通过使用上面的vector并调用getArea()函数对区域进行排序。我该怎么做?例如,我的排序函数应该像这样sortShape(Array, numShape),其中Array是指向创建形状的Shape指针数组。

任何帮助不胜感激

您可以将 std::sort 与合适的比较函数一起使用:

bool compareArea(const Shape* lhs, const Shape* rhs){
  return lhs->getArea() < rhs->getArea();
}
...
std::sort(shapes.begin(), shapes.end(), compareArea);

使用具有用户定义排序标准的排序算法,例如

std::sort(shapes.begin(), shapes.end(), [](Shape * lhs, Shape * rhs)
{
  return lhs->getArea() < rhs->getArea();
});