我有一个基类Shape
,以及其他派生类Circle
,Square
和Triangle
。我创建了三个基类指针的向量。
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()
函数对区域进行排序。我怎样才能做到这一点?
例如,我的sort函数应该与sortShape(Array, numShape)
类似,其中Array
是指向创建的形状的Shape
指针数组。
感谢任何帮助
答案 0 :(得分:3)
您可以将std::sort与合适的比较功能结合使用:
bool compareArea(const Shape* lhs, const Shape* rhs){
return lhs->getArea() < rhs->getArea();
}
...
std::sort(shapes.begin(), shapes.end(), compareArea);
答案 1 :(得分:1)
使用具有用户定义排序标准的排序算法,例如
std::sort(shapes.begin(), shapes.end(), [](Shape * lhs, Shape * rhs)
{
return lhs->getArea() < rhs->getArea();
});