我想检查x
和y
值的给定点是否在点向量内:
bool inside_vector(int x, int y, vector<Point2i>& points)
{
for(vector<Point2i>::const_iterator it = points.begin();
it != points.end();
++it)
{
if(it->x == y && it->y == y)
{
return true;
}
}
return false;
}
没有for
循环还有其他方法吗?
答案 0 :(得分:5)
您可以将std::find or std::find_if与合适的仿函数一起使用,以避免编写自己的循环。但是你没有获得复杂性:它仍然是O(n)。例如,
bool operator==(const Point2i& lhs, const Point2i& rhs)
{
return lhs.x == rhs.x && lhs.y == rhs.y;
}
Point2Di somePoint = Point2Di(x,y); // point to find
auto it = std::find(points.begin(), points.end(), somePoint);
或者,没有相等运算符,
auto it = std::find_if(points.begin(),
points.end(), [&somePoint](const Point2Di& p)
{return somePoint.x == p.x && somePoint.y == p.y;});
答案 1 :(得分:3)
假设您为operator==
结构定义了Point2i
,您可以使用std::find(),如下所示:
std::vector<Point2i>::const_iterator findIt = std::find(
points.begin(),
points.end(),
Point2i(x, y));
我还假设你有一个带有两个坐标的Point2i
构造函数。