LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

#include <iostream>
#include <algorithm>
#include <vector>

struct Datum {
    int n;
    char c;
};

template <class F, class G> F max_field(F first, F last, G getter)
{
    return std::max_element(first, last, [&getter](auto &a, auto &b) { return getter(a) < getter(b); });
}

int main(void)
{
    std::vector <Datum> data = { Datum{1, 'a'}
                               , Datum{2, 'b'}
                               , Datum{3, 'c'}
                               };
    char letter = max_field(std::begin(data), std::end(data), [](Datum &d) { return d.n; })->c;
    std::cout << letter << std::endl;
}

Держи мой костыльный вариант. Нашкрябал щаз за 5 минут после пробежки, но вроде работает. На C++ тыщу лет не писал. Вместо нетипизированного G лучше бы обернуть это в std::function, но с этим ты сам справишься.

Исправление hateyoufeel, :

#include <iostream>
#include <algorithm>
#include <vector>

struct Datum {
    int n;
    char c;
};

template <class F, class G> F max_field(F first, F last, G getter)
{
    return std::max_element(first, last, [&getter](auto &a, auto &b) { return getter(a) < getter(b); });
}

int main(void)
{
    std::vector <Datum> data = { Datum{1, 'a'}
                               , Datum{2, 'b'}
                               , Datum{3, 'c'}
                               };
    char letter = max_field(std::begin(data), std::end(data), [](Datum &d) { return d.n; })->c;
    std::cout << letter << std::endl;
}

Держи мой костыльный вариант. Нашкрябал щаз за 5 минут после пробежки, но вроде работает. На C++ тыщу лет не писал.

Исправление hateyoufeel, :

#include <iostream>
#include <algorithm>
#include <vector>

struct Datum {
    int n;
    char c;
};

template <class F, class G> F max_field(F first, F last, G getter)
{
    return std::max_element(first, last, [&getter](auto &a, auto &b) { return getter(a) < getter(b); });
}

int main(void)
{
    std::vector <Datum> data = { Datum{1, 'a'}
                               , Datum{2, 'b'}
                               , Datum{3, 'c'}
                               };
    char letter = max_field(std::begin(data), std::end(data), [](Datum &d) { return d.n; })->c;
    std::cout << letter << std::endl;
}

Держи мой костыльный вариант.

Исходная версия hateyoufeel, :

#include <iostream>
#include <algorithm>
#include <vector>

struct Datum {
    int n;
    char c;
};

template <class F, class G> F max_field(F first, F last, G getter)
{
    return std::max_element(first, last, [&getter](auto &a, auto &b) { return getter(a) < getter(b); });
}

int main(void)
{
    std::vector <Datum> data = { Datum{1, 'a'}
                               , Datum{2, 'b'}
                               , Datum{3, 'c'}
                               };
    char letter = max_field(std::begin(data), std::end(data), [](Datum &d) { return d.n; })->c;
    std::cout << letter << std::endl;
}

Держи мой костыльный вариант.