gpt4 book ai didi

C++ std::sort 自定义比较函数引用另一个列表

转载 作者:行者123 更新时间:2023-11-30 03:59:07 26 4
gpt4 key购买 nike

我是 C++ 的初学者,我不知道也找不到解决问题的方法。

我试图以一种不寻常的方式对我的 vector 进行排序,但没有成功。

pointsToVisit - 可以具有开始时间和结束时间的 Point 对象列表。

visitedPoints - 来自 pointsToVisit vector 的 Point 对象的索引列表

我想按各个点的值对我的 visitedPoints vector 进行排序

BeeHive
std::vector<Point> pointsToVisit;
std::vector<Route> routes;

Route
std::vector<int> visitedPoints;

我的尝试如下:

bool BeeHive::isPointsVisitStartPrior (int i, int j) { return (pointsToVisit.at(i).startTime<pointsToVisit.at(j).startTime); }

Route BeeHive::sortRouteByStartTime(int routeIndex){
Route route2 = Route();
route2.setStartTime(routes.at(routeIndex).getStartTime());
route2.setVisitedPoints(routes.at(routeIndex).getVisitedPoints());
std::sort(route2.getVisitedPoints().begin()+1, route2.getVisitedPoints().end(), isPointsVisitStartPrior);
evaluateRoute(route2);
return route2;
}

我得到这样的错误:

Error   5   error C3867: 'BeeHive::isPointsVisitStartPrior': function call missing argument list; use '&BeeHive::isPointsVisitStartPrior' to create a pointer to member c:\vrp projekt\vrp\vrp\beehive.cpp  193 1   VRP
Error 6 error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided c:\vrp projekt\vrp\vrp\beehive.cpp 193 1 VRP

我尝试做我的工作的例子是在这个地址下:http://www.cplusplus.com/reference/algorithm/sort/

如果收到任何帮助,我将不胜感激。


是否有可能,为我自己的目的创建冒泡排序将适本地替代 std::sort()?

最佳答案

isPointsVisitStartPrior 是一个成员函数,不能直接用于排序。您必须使用全局函数或函数对象。

如果您有权访问 C++ 11 功能,则可以使用 lambda:

std::sort(route2.getVisitedPoints().begin()+1, route2.getVisitedPoints().end(), 
[&](int i, int j){ return isPointsVisitStartPrior(i, j); });

你也可以用operator()创建一个仿函数对象,比如

class VisitedPointsCompararer {
public:
VisitedPointsCompararer(const std::vector<Point>& pointsToVisit): pointsToVisit(pointsToVisit) {
}


bool operator() (int i, int j) {
return pointsToVisit.at(i).startTime < pointsToVisit.at(j).startTime;
}

...

private:
const std::vector<Point>& pointsToVisit;
}

关于C++ std::sort 自定义比较函数引用另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com