У меня есть список объектов 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
@Tom Проблема заключается в том, что имя 'left' сталкивается с чем-то, если я меняю имя функции на' foo' Мне не нужен функтор, но я могу передать функцию напрямую. –
+1 Если производительность является проблемой, вы можете написать свой собственный алгоритм, который выполняет как один проход по списку, так и возвращает пару минут/макс. –