我有一個Point對象的列表(每個對象都有x,y屬性),並且希望找到最左邊和最右邊的點。我一直試圖用find_if來做,但我不確定它要走的路,因爲我似乎無法通過比較器實例。 find_if要走的路嗎?似乎沒有。那麼,<algorithm>
中是否有算法來實現這一點?查找列表的最左邊和最右邊的點。 std :: find_if正確的方式去?
在此先感謝。
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
typedef struct Point{
float x;
float y;
} Point;
bool left(Point& p1,Point& p2)
{
return p1.x < p2.x;
}
int main(){
Point p1 ={-1,0};
Point p2 ={1,0};
Point p3 ={5,0};
Point p4 ={7,0};
list <Point> points;
points.push_back(p1);
points.push_back(p2);
points.push_back(p3);
points.push_back(p4);
//Should return an interator to p1.
find_if(points.begin(),points.end(),left);
return 0;
}
感謝。必須創建一個struct left {bool operator(){...}};使其工作 – Tom 2010-04-16 08:46:04
@Tom問題似乎是,名稱'left'與某些東西衝突,如果我將函數名稱更改爲'foo',我不需要函子,但可以直接傳遞函數。 – 2010-04-16 08:59:57
+1如果性能是一個問題,您可以編寫自己的算法,在列表中單次傳遞並返回一對最小/最大值。 – 2010-04-16 15:14:57