C++ 使用比较器(C+;+;)时按降序排序向量数组
我有一个Car*对象的向量,指向一个具有id和position属性的对象。我想按位置按降序对向量进行排序(即向量[0]处的最高位置等) 下面是排序和比较器代码:C++ 使用比较器(C+;+;)时按降序排序向量数组,c++,sorting,oop,c++11,vector,C++,Sorting,Oop,C++11,Vector,我有一个Car*对象的向量,指向一个具有id和position属性的对象。我想按位置按降序对向量进行排序(即向量[0]处的最高位置等) 下面是排序和比较器代码: bool comparator(Car* firstObject, Car* secondObject) { return firstObject->get_position() > secondObject->get_position(); } void sortingFunction(vector<
bool comparator(Car* firstObject, Car* secondObject) {
return firstObject->get_position() > secondObject->get_position();
}
void sortingFunction(vector<Car*> arrayOfCars) {
sort(arrayOfCars->begin(), arrayofCars->end(), comparator);
}
bool比较器(Car*firstObject,Car*secondObject){
返回第一个对象->获取位置()>第二个对象->获取位置();
}
无效排序函数(向量数组fcars){
排序(arrayOfCars->begin(),arrayOfCars->end(),比较器);
}
我尝试使用std::reverse()方法,但(我可能错了)我发现它只适用于数字向量,而不是对象向量。枚举是使用反向方法的一种方法,还是有一种方法可以让我用比较器向排序函数添加更强大的功能
提前谢谢 排序功能无效。对于初学者,向量应该通过引用传递。向量不是通过指针传递的。因此,您不能对其应用运算符
->
因此函数定义如下所示
void sortingFunction( vector<Car*> &arrayOfCars )
{
sort( arrayOfCars.begin(), arrayofCars.end(), comparator );
}
在这种情况下,成员函数get\u position
必须是声明如下的常量成员函数
T get_position() const;
^^^^^
其中
T
是函数的返回类型。排序函数无效。对于初学者,向量应该通过引用传递。向量不是通过指针传递的。因此,您不能对其应用运算符->
因此函数定义如下所示
void sortingFunction( vector<Car*> &arrayOfCars )
{
sort( arrayOfCars.begin(), arrayofCars.end(), comparator );
}
在这种情况下,成员函数get\u position
必须是声明如下的常量成员函数
T get_position() const;
^^^^^
<代码>代码> t>代码>是函数的返回类型。如果这是C++问题,那么为什么
std::reverse
?你的比较器没有按照你想要的顺序排序吗?2) std::reverse
适用于任何提供双向迭代器的容器。存储在std::vector
中的对象类型无关紧要,也不取决于容器的内容。为什么先以一种方式排序,然后反向排序?为什么不立即按正确的方式排序呢?我看错了问题,不得不删除我的答案。究竟出了什么问题?为什么要使用<代码> STD::反转< /代码>?如果这是C++问题,那么为什么<代码> C < /C>语言标签?请不要用不相关的标签发送垃圾邮件。1)为什么需要std::reverse
?你的比较器没有按照你想要的顺序排序吗?2) std::reverse
适用于任何提供双向迭代器的容器。存储在std::vector
中的对象类型无关紧要,也不取决于容器的内容。为什么先以一种方式排序,然后反向排序?为什么不立即按正确的方式排序呢?我看错了问题,不得不删除我的答案。究竟出了什么问题?为什么要使用std::reverse
?不需要在比较器中使用const
。向量
不是常量
,它不包含常量
指针。如果get_position()
不是const
,则不要在比较器中使用const
。但是,如果get_position()
是const
,那么一定要在比较器中使用const
。@RemyLebeau如果函数中的点数据没有更改,它们总是应该有限定符const。这在可行时是可以接受的,但几乎不需要。您不需要在比较器中使用const
。向量
不是常量
,它不包含常量
指针。如果get_position()
不是const
,则不要在比较器中使用const
。但是,如果get_position()
是const
,那么一定要在比较器中使用const
。@RemyLebeau如果函数中的定点数据没有改变,那么它们总是应该有限定符const。这是在可行时使用的,是的,但几乎不需要