fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. template <typename T>
  6. class Masker {
  7. private:
  8. template <typename V>
  9. struct Item {
  10. bool mask;
  11. V val;
  12. };
  13. std::vector<Item<T>> vec;
  14. public:
  15. Masker(std::vector<bool> mask, std::vector<T> vals) {
  16. for(size_t i = 0; i < vals.size(); i++) {
  17. vec.push_back({mask[i], vals[i]});
  18. }
  19. }
  20. const T& find_min() {
  21. return (*min_element(vec.begin(), vec.end(),
  22. [](const auto& lhs, const auto& rhs){
  23. if(!lhs.mask) { return false; }
  24. if(!rhs.mask) { return true; }
  25. return lhs.val < rhs.val;
  26. })).val;
  27. }
  28. };
  29.  
  30. int main() {
  31.  
  32. std::vector<bool> mask = {0, 0, 1, 0, 1, 1, 0};
  33. std::vector<double> vec = {7.1, 1.0, 3.2, 2.0, 1.8, 5.0, 0.0};
  34.  
  35. std::cout << Masker<double>(mask, vec).find_min();
  36.  
  37. return 0;
  38. }
Success #stdin #stdout 0s 5516KB
stdin
Standard input is empty
stdout
1.8