在vector排序时候,有时候需要自定义排序,这个教程网上也很多,但是一般都是只使用了vector元素内部的变量,这里给出传入变量的实例代码
float camera_param_cx = camera_param_cx_;float same_traffic_light_max_area = same_traffic_light_max_area_;// 使用自定义的比较函数综合面积,距离图像中心距离,置信度对相同方向的红绿灯进行排序。std::sort(same_traffic_light.begin(), same_traffic_light.end(),[camera_param_cx, same_traffic_light_max_area](std::shared_ptr<LightStatus> &same_traffic_light_a,std::shared_ptr<LightStatus> &same_traffic_light_b) {return compareRectByScore(same_traffic_light_a, same_traffic_light_b, camera_param_cx,same_traffic_light_max_area);});
比较函数定义部分
// 自定义一个比较函数,按照综合分数大小进行排序
bool compareRectByScore(std::shared_ptr<LightStatus> &same_traffic_light_a,std::shared_ptr<LightStatus> &same_traffic_light_b, float camera_param_cx,float same_traffic_light_max_area)
{//你的逻辑//可以在内部使用传入的四个变量,进行比较
}
lambda函数中的[camera_param_cx, same_traffic_light_max_area]捕获了外部变量camera_param_cx和same_traffic_light_max_area,然后将它们作为参数传入compareRectByScore函数中。这样就可以在compareRectByScore函数中同时使用两个额外的变量了。记住类的成员变量不能直接传入,需要重新定义后赋值后传入