无法将 std::sort 与 Android NDK 一起使用

Not able to use std::sort with Android NDK

ndk-build 总是抱怨 std::sort() 参数错误,并且在同一消息中找不到它。 ndk 是否使用其他功能?

candidate expects 2 arguments, 3 provided sort(centroids.begin() + i * 10, centroids.begin() + (i + 1) * 10, pointXGreater);

error: no matching function for call to 'sort(__gnu_cxx::__normal_iterator*, std::vector > >, __gnu_cxx::__normal_iterator*, std::vector > >, removeConvexity(cv::Mat, cv::Mat, cv::Mat)::&)'

for (int i = 0; i < 10; i++)
{
    sort(centroids.begin() + i * 10, centroids.begin() + (i + 1) * 10, pointXGreater);
}

这就是函数调用。

vector<cv::Point> centroids;
centroids.reserve(100);

for (int i = 0; i < contours.size(); i++) {
    vector<cv::Point> contour = contours.at(i);
    Moments mom = moments(contour);
    cv::Point center = cv::Point(int(mom.m10 / mom.m00), int(mom.m01 / mom.m00));
    centroids.push_back(center);
}

std::reverse(centroids.begin(), centroids.end());

struct {
    bool operator()(const cv::Point p1, const cv::Point p2) {
        return p1.x < p2.x;
    }
} pointXGreater;

不知怎么的,我只能编译一次。现在问题又来了。

static bool pointXGreater(const cv::Point p1, const cv::Point p2) 
{ 
    return p1.x < p2.x; 
} 
for (int i = 0; i < 10; i++) 
{
    sort(centroids.begin() + i * 10, centroids.begin() + (i + 1) * 10, pointXGreater); 
}

解决了问题。