Как описать max_element у вектора класса?

325
02 июля 2022, 22:50

Есть класс CarShop, содержащий в себе следующий переменные:

std::string name;
int yearOfCreation;
int engineCapacity;
int price;

А также соответствующие get-методы

При попытке поиска макс. элемента выдаёт ошибку компилятора 2100.

Как нужно правильно описать max_element()?

setlocale(LC_ALL, "ru");
std::vector<CarShop> car;
int size = 0;
    std::string name;
    int yearOfCreation;
    int engineCapacity;
    int price;
int choise = 0;
do {
    //Заполняем класс
    car.resize(size);
    cout << "\nВведите марку для " << size + 1 << "-й машины: ";
    cin >> name;
    cout << "Введите год выпуска для " << size + 1 << "-й машины: ";
    cin >> yearOfCreation;
    cout << "Введите объём двигателя для " << size + 1 << "-й машины: ";
    cin >> engineCapacity;
    cout << "Введите цену для " << size + 1 << "-й машины: ";
    cin >> price;

    car.insert(car.begin() + size, CarShop(name, yearOfCreation, engineCapacity, price));
    size++;
    //Заполняем класс      END
    //Предлагаем юзеру добавить машину
    do {
        std::cout << "  Добавить еще одну машину?\n\t 1 - ДА\n\t 0 - НЕТ\n";
        cin >> choise;
    } while (choise > 1 || choise < 0);
    //Предлагаем юзеру добавить машину     END
} while (choise == 1);

//Поиск макс. элемента
std::max_element(car[0].getEngineCapacity(), car[size].getEngineCapacity());

system("pause");
return 0;
Answer 1

Примерно так -

std::max_element(car.begin(),car.end(),
                 [](const CarShop& a, const CarShop& b)
                 { return a.getEngineCapacity() < b.getEngineCapacity()});

Только не забудьте воспользоваться тем, что эта функция возвращает, а то вы ее как-то вызвали, а результат не использовали...

READ ALSO
Тип, возвращаемый функцией main

Тип, возвращаемый функцией main

Во многих примерах кода на сайте встречаются как записи вида void main(), так и int main() для главной функции программы

222
Getter и Setter для указателя

Getter и Setter для указателя

Вопрос заключается в том, как правильно реализовать Getter для указателя, чтобы он был "безопасным"Под безопасностью я подразумеваю предотвращение...

248
Как использовать std::bind с методами класса?

Как использовать std::bind с методами класса?

Пытаюсь использовать std::bind с методом класса:

207
Преобразование типа вектора из uint8 в uint16

Преобразование типа вектора из uint8 в uint16

Есть вектор std::vector<uint8_t> From; Он содержит 10^9 элементов

193