найти максимальное и минимальное значение в векторе - PullRequest
0 голосов
/ 06 августа 2020

Я хочу проверить, есть ли максимальный и минимальный элемент x.

у меня есть адрес

адрес был векторно написан в верхней части кода x обозначает первое число, t для строка и я для столбца. хотите сравнить значение x и получить максимальное и минимальное число, которое находится между 0 и 100

[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 maxH =100;
int minH = 0;
for (t = 0, t < 12, t++){
     for (i = 0, i < 6, i++){
        if(minH > addresss.(t).(i).x){
           minH = addresss.(t).(i).x;
        }
        if(maxH < addresss.(t).(i).x){
           maxH = addresss.(t).(i).x;
        }
     }
}
if statement not working 

1 Ответ

1 голос
/ 06 августа 2020

Предположим, у нас есть вектор пар 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).

...