我试图根据它们的 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;
}
);
关于c++ - 在点 vector 中搜索/查找点的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20708097/