ошибка min_element - PullRequest
       23

ошибка min_element

1 голос
/ 30 января 2012

Я не программист на C ++, так что, может быть, это просто.

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

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

Я сделал цикл 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>

1 Ответ

6 голосов
/ 30 января 2012

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

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

std::cout<<*min_element()

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

...