Я не программист на C ++, так что, может быть, это просто.
У меня есть вектор класса Point, и я хочу найти прямоугольник AABB:
- мин х - мин у
- мин х - макс у
- макс х - мин у
- макс х - макс у
Я сделал цикл for, сохранив min и max (один раз для x и один раз для y) и обновив значение для каждой итерации с помощью некоторых if.
но я уверен, что что-то умнее в std или boost
.
например, я только что попробовал:
vector<ofPoint> points;
// ....
bool _compareX(ofPoint const &p1, ofPoint const &p2) { return p1.x > p2.x; }
bool _compareY(ofPoint const &p1, ofPoint const &p2) { return p1.y > p2.y;}
void DrawerWidget::foo()
{
cout << std::min_element(points.begin(), points.end(), &_compareX) << endl;
}
но я получаю странную ошибку вроде
ошибка: нет совпадения для оператора << оператор << в d std :: cout << std :: min_element
[with _FIter = __gnu_cxx :: __ normal_iterator>>, _Compare = bool
() (const ofPoint &, const
ofPoint &)] (((DrawerWidget ) это) -> DrawerWidget :: points.std :: вектор <_Tp,
_Alloc> :: начинаются с _Tp = ofVec3f, _Alloc = std :: allocator,
((DrawerWidget *) это) -> DrawerWidget :: points.std :: вектор <_Tp,
_Alloc> :: заканчивается _Tp = ofVec3f, _Alloc = std :: allocator, _compareX) ’
и аналогичная ошибка, если я поместил min_element где-нибудь еще над << </p>