fork(2) download
  1. #include <map>
  2. #include <cassert>
  3. #include <iostream>
  4.  
  5. template< typename T, typename U >
  6. auto infimum(std::map<T,U> const& ctr, T query)
  7. {
  8. auto it = ctr.upper_bound(query);
  9. return ctr.empty() || it == ctr.begin() ? ctr.cend() : --it;
  10. }
  11.  
  12. template< typename T, typename U >
  13. bool is_in_interval(std::map<T,U> const& ctr, T query)
  14. {
  15. auto inf = infimum(ctr, query);
  16. return inf == ctr.end() ? false : query <= inf->second;
  17. }
  18.  
  19. int main()
  20. {
  21. using std::cout;
  22. using Map = std::map<int,int>;
  23. Map intervals{{2,5}, {8,9}};
  24.  
  25. auto red = infimum(intervals, 4);
  26. assert(red->first == 2);
  27. cout << "red->first " << red->first << "\n";
  28.  
  29. auto green = infimum(intervals, 6);
  30. assert(green->first == 2);
  31. cout << "green->first " << green->first << "\n";
  32.  
  33. auto pink = infimum(intervals, 8);
  34. assert(pink->first == 8);
  35. cout << "pink->first " << pink->first << "\n";
  36.  
  37. auto yellow = infimum(intervals, 1);
  38. assert(yellow == intervals.cend());
  39.  
  40. auto larger_than_all = infimum(intervals, 15);
  41. assert(larger_than_all->first == 8);
  42.  
  43. bool red_is = is_in_interval(intervals, 4);
  44. cout << "red is in " << red_is << "\n";
  45.  
  46. bool green_is = is_in_interval(intervals, 6);
  47. cout << "green is in " << green_is << "\n";
  48.  
  49. bool pink_is = is_in_interval(intervals, 8);
  50. cout << "pink is in " << pink_is << "\n";
  51.  
  52. bool yellow_is = is_in_interval(intervals, 1);
  53. cout << "yellow is in " << yellow_is << "\n";
  54. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
red->first 2
green->first 2
pink->first 8
red is in 1
green is in 0
pink is in 1
yellow is in 0