2012-01-30 54 views
1

我不是一個C++編碼器,所以可能很容易。min_element錯誤

我有Point類的載體,我想找到的AABB矩形:

  1. 分鐘X - 分Ÿ
  2. 分鐘X - 最大值爲y
  3. 最大X - 最小Ÿ
  4. 最大x - 最大y

我已經做了循環保存最小和最大(一次爲x和一次爲y),並更新每個迭代的值與一些ifs。

但我敢肯定,有一些更聰明的東西或在提高 。

例如我只是想:

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 2012-01-30 19:35:15

+0

@nkint:這與主要問題中提出的問題沒有什麼不同。請原諒我也許我誤解了,但我不確定你到底想要做什麼。 – 2012-01-30 19:39:25

+0

好的,對不起,我會開一個新主題 – nkint 2012-01-30 19:57:45

相關問題