Предположим, у нас есть вектор пар x / y, и мы хотим найти те, которые имеют наименьшее и наибольшее x
значения. Мы могли бы сделать это с помощью std::minmax_element
(или std::minmax
, хотя в этом случае это немного неуклюже, IMO), что-то в этом общем порядке:
#include <vector>
#include <algorithm>
#include <iostream>
struct Point {
int x;
int y;
bool operator<(Point const &other) const {
return x < other.x;
}
};
std::vector<Point> points {
{28,13},{48,10},{48,81},{48,54},{48,0},{10,20},
{48,13},{38,10},{58,81},{48,54},{48,0},{40,20},
{18,13},{28,10},{68,81},{48,54},{48,0},{04,20}
};
int main() {
auto pos = std::minmax_element(points.begin(), points.end());
std::cout << "Smallest X: [" << pos.first->x << ", " << pos.first->y << "]\n";
std::cout << "Largest X: [" << pos.second->x << ", " << pos.second->y << "]\n";
}
В качестве отступления я бы также обратите внимание, что с парой: [04,20]
все в порядке, но следует отметить, что начало 0
означает, что первое число фактически дается в восьмеричном, а не десятичном виде. В этом случае (single di git меньше 8) они эквивалентны, но что-то вроде 112, 011
(с использованием 0 для заполнения обоих до трех цифр) даст результаты, которые поначалу могут быть несколько неожиданными (в десятичном формате второе число на самом деле 9
, а не 11
).