Если вы просто хотите, чтобы найти Point
, который соответствует одному вы подачи:
std::vector<Point> points;
// points is filled somewhere
Point p { 1, 2 };
std::vector<Point>::iterator it = std::find(points.begin(), points.end(), p);
Если вы хотите настроить сравнение, вы можете использовать std::find_if
:
Point pt { 1, 2 };
std::vector<Point>::iterator it = std::find_if(points.begin(), points.end(), [&](const Point& p)
{
return pt.x == p.x;
});
И, ради Бога, игнорировать вздор «AAA» ...
Боковое примечание: ваш вектор не нужно сортировать, чтобы использовать std::find
(хотя он ускорит его, если он есть). И если вы можете использовать стандарт C++ 11, вам не нужно, чтобы создать функтор:
std::sort(temp.begin(), temp.end(), [](const Point& p1, const Point& p2)
{
return p1.x < p2.x;
});
Кроме того, если элементы вашего Point
класса чисел с плавающей точкой, вы не хотите использовать прямое равенство для сравнений. Вместо этого, нарвать небольшое количество в качестве минимальной приемлемой точности (эпсилон), и сравнить разницу между 2 значения к нему:
float x = SOME_VALUE;
float y = SOME_OTHER_VALUE;
float EPSILON = 0.000000001;
bool are_equal = std::abs(x - y) < EPSILON;
Показать, что вы пробовали. Вы посмотрели на ['std :: find'] (http://en.cppreference.com/w/cpp/algorithm/find)? –
, поэтому у вас есть 2d или 3d точки, и вы хотите найти, есть ли конкретная точка в векторе? или ближайший к вашей точке или что-то подобное? – Raxvan
Да, я тоже пытался найти. но, по-видимому, он не может сравнивать точки! Я добавлю, что я сделал. –