fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. template <class U, class V>
  5. struct intersect_impl;
  6.  
  7. template <class U, class V>
  8. bool intersect(const U& u, const V& v) {
  9. return intersect_impl<U, V>::apply(u, v);
  10. }
  11.  
  12. template<>
  13. struct intersect_impl<std::pair<int, int>, int> {
  14. static bool apply(const std::pair<int, int>& interval, int value) {
  15. return interval.first <= value && value <= interval.second;
  16. }
  17. };
  18.  
  19. template<>
  20. struct intersect_impl<std::pair<int, int>, std::pair<int, int>> {
  21. static bool apply(const std::pair<int, int>& u, const std::pair<int, int>& v) {
  22. return intersect(u, v.first) || intersect(u, v.second);
  23. }
  24. };
  25.  
  26. int main() {
  27. std::cout << "[0, 2] ∩ 1 ? " << intersect(std::make_pair(0, 2), 1) << "\n";
  28. std::cout << "[0, 2] ∩ 1 [3, 4] ? " << intersect(std::make_pair(0, 2), std::make_pair(3, 4)) << "\n";
  29. std::cout << "[0, 2] ∩ 1 [1, 4] ? " << intersect(std::make_pair(0, 2), std::make_pair(1, 4)) << "\n";
  30. return 0;
  31. }
Success #stdin #stdout 0s 4392KB
stdin
Standard input is empty
stdout
[0, 2] ∩ 1 ? 1
[0, 2] ∩ 1 [3, 4] ? 0
[0, 2] ∩ 1 [1, 4] ? 1