min_element错误

时间:2012-01-30 18:40:20

标签: c++ std stdvector min aabb

我不是c ++编码器,所以可能很容易。

我有一个Point类的向量,我想找到AABB矩形:

  1. min x - min y
  2. min x - max y
  3. max x - min y
  4. max x - max y
  5. 我做了一个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;
    }
    

    但我得到一个像

    这样的奇怪错误
      

    错误:'std :: cout&lt;&lt;中的'运算符&lt;&lt;'不匹配的std :: min_element   [使用_FIter = __gnu_cxx :: __ normal_iterator&gt; &gt;,_比较= bool   ()(const ofPoint&amp;,const   ofPoint&安培;)](((DrawerWidget )此) - &GT; DrawerWidget :: points.std ::矢量&lt; _TP,   _Alloc&gt; ::以_Tp = ofVec3f,_Alloc = std :: allocator开头,   ((DrawerWidget *)此) - &GT; DrawerWidget :: points.std ::矢量&lt; _TP,   _Alloc&gt; :: end with _Tp = ofVec3f,_Alloc = std :: allocator,_compareX)'

    如果我将min_element放在&lt;&lt;&lt;

    上的其他地方,则会出现类似的错误

1 个答案:

答案 0 :(得分:6)

min_element将迭代器返回到最小元素,您尝试将其发送到cout

使用:

std::cout<<*min_element()

除非向量元素是<<已经有重载cout运算符的类型,否则您还需要重载<<