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

template <typename T>
class Masker {
private:
	template <typename V>
	struct Item {
		bool mask;
		V val;
	};
	std::vector<Item<T>> vec;
public:
	Masker(std::vector<bool> mask, std::vector<T> vals) {
		for(size_t i = 0; i < vals.size(); i++) {
			vec.push_back({mask[i], vals[i]});
		}
	}
	const T& find_min() {
		return (*min_element(vec.begin(), vec.end(),
			[](const auto& lhs, const auto& rhs){ 
				if(!lhs.mask) { return false; }
				if(!rhs.mask) { return true; }
				return lhs.val < rhs.val;
			})).val;
	}
};

int main() {
	
	std::vector<bool> mask   = {0,   0,   1,   0,   1,   1,   0};
	std::vector<double> vec = {7.1, 1.0, 3.2, 2.0, 1.8, 5.0, 0.0};
	
	std::cout << Masker<double>(mask, vec).find_min();
	
	return 0;
}