Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用比较器(C+;+;)时按降序排序向量数组_C++_Sorting_Oop_C++11_Vector - Fatal编程技术网

C++ 使用比较器(C+;+;)时按降序排序向量数组

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<

我有一个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);
}
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++问题,那么为什么C>/Cuth>语言标记?请不要用不相关的标签发送垃圾邮件。1)为什么需要
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。这是在可行时使用的,是的,但几乎不需要