LINUX.ORG.RU

чем можно заменить min_element/max_element с условием выборки?

 ,


0

1

проблема в том что min_element берет по умолчанию первый элемент в качестве результата, делать remove_if а если контейнер только для чтения?

вот пример, результат 20, мне нужно «not found»

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

int main()
{
    std::vector< std::pair<bool, int> > v = { {false, 20}, {false, 3}, {false, 11}, {false, 7}, {false, 12} };
    auto it = std::min_element(v.begin(), v.end(),
                        [](const std::pair<bool, int> & p1, const std::pair<bool, int> & p2)
    {
        if(p1.first && p2.first)
            return p1.second < p2.second;

        return p1.first;
    });

    if(it != v.end())
        std::cout << (*it).second << std::endl;
    else
        std::cout <<  "not found" << std::endl;

    return 0;
}

Так ты в начале отфильтруй по первым полям, а в остатке уже ищи минимальный элемент. Тут ренджи очень хороши как раз, с итераторами сложнее.

anonymous ()