Как найти минимальный элемент среди некоторых объектов класса?
Прошу, пожалуйста, помочь с нахождением минимального элемента по полю cost. Нужно найти минимальную цену на выбранном маршруте (например: 1981(outstation) - 1902(instation)) (уточнение: их может быть несколько, но поле numoftrain будет отличаться (например: 920(numoftrain), 921(numoftrain))
#include <iostream>
using namespace std;
class TIMETABLE
{
public:
double outtime;
double intime;
int numoftrain;
int outstation;
int instation;
double cost;
double timeinroad;
void print()
{
cout << numoftrain << "\n" << outstation << "\n" << instation << "\n" << cost <<
"\n" << outtime << "\n" << intime << endl;
}
void search(TIMETABLE* a, int size)
{
TIMETABLE b;
b.outstation;
b.instation;
cout << "Введите станцию отправления" << endl;
cin >> outstation;
b.outstation = outstation;
cout << "Введите станцию прибытия" << endl;
cin >> instation;
b.instation = instation;
TIMETABLE *min = new TIMETABLE[NULL];
min[0].cost = 0;
for (int i = 0; i < size; i++)
{
if (a[i].outstation == b.outstation && a[i].instation == b.instation)
{
cout << "Номер поезда : " << a[i].numoftrain << "\n" << "Цена переезда : " << a[i].cost << endl;
if (a[i].cost < min[i].cost)
{
min[i].cost = a[i].cost;
cout << "Номер поезда : " << a[i].numoftrain << "Минимальная цена : " << min[i].cost << endl;
}
else
{
cout << "Erorr" << endl;
}
}
}
}
};
int main()
{
setlocale(LC_ALL, "Rus");
TIMETABLE a[250];
a[0].numoftrain = 907;
a[0].outstation = 1909;
a[0].instation = 1929;
a[0].cost = 1790.87;
a[0].outtime = 00.50;
a[0].intime = 20.00;
a[0].timeinroad = (((a[0].intime) * 60) - ((a[0].outtime) * 60))/60;
a[1].numoftrain = 908;
a[1].outstation = 1909;
a[1].instation = 1929;
a[1].cost = 1790.87;
a[1].outtime = 00.50;
a[1].intime = 20.00;
a[1].timeinroad = (((a[1].intime) * 60) - ((a[1].outtime) * 60)) / 60;
a[2].numoftrain = 909;
a[2].outstation = 1929;
a[2].instation = 1909;
a[2].cost = 1790.87;
a[2].outtime = 10.01;
a[2].intime = 00.01;
a[2].timeinroad = ((24 * 60) - ((((a[2].outtime * 60)) - (a[2].intime * 60)))) / 60;
a[3].numoftrain = 909;
a[3].outstation = 1929;
a[3].instation = 1921;
a[3].cost = 199.15;
a[3].outtime = 11.10;
a[3].intime = 01.00;
a[3].timeinroad = 13.50;
a[4].numoftrain = 910;
a[4].outstation = 1929;
a[4].instation = 1909;
a[4].cost = 1790.87;
a[4].outtime = 10.01;
a[4].intime = 00.01;
a[4].timeinroad = ((24 * 60) - ((((a[4].outtime * 60)) - (a[4].intime * 60)))) / 60;
a[5].numoftrain = 910;
a[5].outstation = 1929;
a[5].instation = 1921;
a[5].cost = 199.15;
a[5].outtime = 11.10;
a[5].intime = 01.00;
a[5].timeinroad = 13.50;
a[6].numoftrain = 911;
a[6].outstation = 1902;
a[6].instation = 1937;
a[6].cost = 191.87;
a[6].outtime = 23.00;
a[6].intime = 14.40;
a[6].timeinroad = 15.40;
a[7].numoftrain = 914;
a[7].outstation = 1937;
a[7].instation = 1902;
a[7].cost = 191.89;
a[7].outtime = 09.24;
a[7].intime = 00.52;
a[7].timeinroad = ((24 * 60) - ((((a[7].outtime * 60)) - (a[7].intime * 60)))) / 60;
a[8].numoftrain = 917;
a[8].outstation = 1902;
a[8].instation = 1929;
a[8].cost = 300.18;
a[8].outtime = 09.25;
a[8].intime = 20.01;
a[8].timeinroad = 10.36;
a[9].numoftrain = 918;
a[9].outstation = 1929;
a[9].instation = 1902;
a[9].cost = 300.20;
a[9].outtime = 06.55;
a[9].intime = 17.10;
a[9].timeinroad = 10.15;
a[10].numoftrain = 919;
a[10].outstation = 1902;
a[10].instation = 1981;
a[10].cost = 130.60;
a[10].outtime = 04.59;
a[10].intime = 20.06;
a[10].timeinroad = 15.07;
a[11].numoftrain = 920;
a[11].outstation = 1981;
a[11].instation = 1902;
a[11].cost = 120.55;
a[11].outtime = 10.00;
a[11].intime = 01.05;
a[11].timeinroad = 15.05;
a[12].numoftrain = 921;
a[12].outstation = 1981;
a[12].instation = 1902;
a[12].cost = 120.55;
a[12].outtime = 10.00;
a[12].intime = 01.05;
a[12].timeinroad = 15.05;
a[13].numoftrain = 935;
a[13].outstation = 1981;
a[13].instation = 1902;
a[13].cost = 191.48;
a[13].outtime = 20.03;
a[13].intime = 10.56;
a[13].timeinroad = 14.53;
a[14].numoftrain = 936;
a[14].outstation = 1981;
a[14].instation = 1902;
a[14].cost = 191.48;
a[14].outtime = 20.03;
a[14].intime = 10.56;
a[14].timeinroad = 14.53;
a[15].numoftrain = 957;
a[15].outstation = 1937;
a[15].instation = 1902;
a[15].cost = 131.36;
a[15].outtime = 00.55;
a[15].intime = 15.02;
a[15].timeinroad = 14.07;
a[16].numoftrain = 965;
a[16].outstation = 1902;
a[16].instation = 1929;
a[16].cost = 180.27;
a[16].outtime = 09.33;
a[16].intime = 17.57;
a[16].timeinroad = 08.24;
for (int i = 0; i < 1; i++)
{
a[i].search(a, 13);
}
return 0;
}
Ответы (1 шт):
Автор решения: James
→ Ссылка
Так не пробовали:
const TIMETABLE* minElem =
std::min_element(
&a[0],
&a[16],
[](const TIMETABLE& arg1, const TIMETABLE& arg2) { return arg1.cost < arg2.cost; });