Есть массив структур
struct CMyData
{
int count;
int w;
int h;
};
CMyData myArray[100];
Есть вектор содержащий несколько индексов этого массива:
std::vector<int> indeces;
Необходимо найти итератор/индекс на элемент массива myArray в котором count максимально и в случае, если таких элементов несколько, то тот элемент, у которого (w*h) минимально.
Хотелось бы это сделать через stl и лямбада-функции
Не очень понял для чего в этой задаче нужен indeces, поэтому предлагаю решение без него.
auto it = std::max_element(std::begin(myArray), std::end(myArray),
[](const auto& l, const auto& r)
{
if (l.count != r.count)
return l.count < r.count;
else
return l.w * l.h > r.w * r.h;
});
std::cout << std::distance(std::begin(myArray), it) << '\n';
Если indeces задают некое подмножество индексов, которые нужно рассматривать, а остальные игнорировать, то код может быть таким:
auto it = std::max_element(std::begin(indeces), std::end(indeces),
[](int ln, int rn)
{
const CMyData& l = myArray[ln];
const CMyData& r = myArray[rn];
if (l.count != r.count)
return l.count < r.count;
else
return l.w * l.h > r.w * r.h;
});
std::cout << *it << '\n';
спасибо alexolut за ответ
несколько переделал код для своей цели
std::vector<int>::iterator it = std::max_element(indeces.begin(), indeces.end(), [myArray](const int id1, const int id2) {
if (myArray[id1].count != myArray[id2].count)
return myArray[id1].count < myArray[id2].count;
return (myArray[id1].w * myArray[id1].h) > (myArray[id2].w * myArray[id2].h);
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости