Есть массив структур
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);
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу программу на C++ в Linux в среде NetBeansIDEХочу использовать #include <fillesystem>, чтобы ее использовать нужно добавить флаг -std=c++17 или -std=gnu++17
Пробовал отсеивать через if, но не получилосьПоможете реализовать?