首页 > 解决方案 > 在使用比较器时按降序对向量数组进行排序(C++)

问题描述

我有一个 Car* 对象的向量,它们指向具有 id 和 position 属性的对象。我想按位置降序对向量进行排序(即向量 [0] 等处的最高位置)。

这是下面的排序和比较器代码:

bool comparator(Car* firstObject, Car* secondObject) {
    return firstObject->get_position() > secondObject->get_position();
}

void sortingFunction(vector<Car*> arrayOfCars) {
    sort(arrayOfCars->begin(), arrayofCars->end(), comparator);
}

我尝试使用 std::reverse() 方法,但是(我可能错了)我看到它只适用于数字向量而不是对象向量。枚举是一种使用反向方法的方法,还是有一种方法可以让我通过比较器以某种方式将更大的功能添加到排序函数中?

提前致谢!

标签: c++sortingoopc++11vector

解决方案


排序功能无效。对于初学者,向量应该通过引用传递。并且向量不是通过指针传递的。因此,您可能不会将运算符->应用于它。

所以函数定义看起来像

void sortingFunction( vector<Car*> &arrayOfCars ) 
{
    sort( arrayOfCars.begin(), arrayofCars.end(), comparator );
}

比较器可以用这些微小的变化来编写

bool comparator( const Car *firstObject, const Car *secondObject) 
{
    return firstObject->get_position() > secondObject->get_position();
}

在这种情况下,成员函数get_position必须是一个常量成员函数,声明如下

T get_position() const;
                 ^^^^^ 

其中T是函数的返回类型。


推荐阅读