在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函数中同时使用两个额外的变量了。记住类的成员变量不能直接传入,需要重新定义后赋值后传入