我试图根据它们的x坐标对这些点进行排序,并对 vector 进行二进制搜索,但是找不到我知道它们存在的点。

谢谢你的帮助。

struct PointSort {
    bool operator() (cv::Point pt1, cv::Point pt2) { return (pt1.x < pt2.x);}
} mySort;

.
.
.
std::sort (temp.begin(), temp.end(), mySort);
if (std::binary_search(temp.begin(), temp.end(), somePoint, mySort)){
    doSomething();
}

最佳答案

所以像这样:

struct point { int x, y; };
std::vector<point> pts { {1,2}, {4,5} };
auto comp_x=[](const point& p1, const point& p2) {
    return p1.x < p2.x;
};
std::sort(begin(pts), end(pts), comp_x);
//using binary search
auto it=std::lower_bound(begin(pts), end(pts), some_point, comp_x);
//it now points to the point

下界函数使用二进制搜索来查找第一个元素(upper_bound查找最后一个元素),并为您提供对该元素的迭代器。

如果您不需要对它进行排序,我将使用std::find
auto it=std::find_if(begin(pts), end(pts), [&](const point& p) {
        return p.x==some_point.x;
    }
);

09-09 23:15
查看更多