проблема в том что 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;
}