我试图根据它们的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;
}
);