2012-01-30 5 views
1

Я не кодер C++, так что, возможно, это легко.Ошибка min_element

У меня есть вектор класса точек, и я хочу, чтобы найти AABB прямоугольник:

  1. мин х - мин у
  2. мин х - макс у
  3. макс х - мин у
  4. max x - max y

Я сделал цикл for, сохраняя min и max (один раз для x и один раз для y) и обновляя значение для каждой итерации с некоторыми ifs.

, но я уверен, что есть что-то умнее в 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; 
} 

но я получаю странное сообщение об ошибке, как

error: no match for ‘operator<<’ in ‘std::cout << std::min_element [with _FIter = __gnu_cxx::__normal_iterator > >, _Compare = bool ()(const ofPoint&, const ofPoint&)](((DrawerWidget)this)->DrawerWidget::points.std::vector<_Tp, _Alloc>::begin with _Tp = ofVec3f, _Alloc = std::allocator, ((DrawerWidget*)this)->DrawerWidget::points.std::vector<_Tp, _Alloc>::end with _Tp = ofVec3f, _Alloc = std::allocator, _compareX)’

и подобной ошибки, если я поставил min_element где-то над < <

ответ

6

min_element возвращает итератор минимальному элементу, вы пытаетесь отправить его cout.

Использование:

std::cout<<*min_element() 

И вы также должны перегружать <<, если вектор элемент не является типом, для которого cout уже перегруженную << оператора.

+0

ОК, но есть ли самый лучший способ для полного AABB? – nkint

+0

@nkint: Разве это не совсем отличается от Вопроса, заданного в главном Вопросе. Простите меня, может быть, я неправильно понимаю, но я точно не знаю. То, что вы пытаетесь сделать на самом деле. –

+0

ok простите, я открою новую тему – nkint

 Смежные вопросы

  • Нет связанных вопросов^_^