Advertisement
Guest User

minmax value + count

a guest
Mar 5th, 2015
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. template <typename InputIterator, typename Predicate>
  2. auto minmax_element(InputIterator first, InputIterator last, Predicate pred)
  3.  -> std::pair<std::pair<decltype(*first), unsigned>, std::pair<decltype(*first), unsigned>>
  4. {
  5.     auto min_elem = *first;
  6.     auto max_elem = *first;
  7.     unsigned min_n = 0;
  8.     unsigned max_n = 0;
  9.  
  10.     for (auto it = first; it != last; ++it) {
  11.         auto const& n = *it;
  12.         if (n < min_elem) {
  13.             min_elem = n;
  14.             min_n    = 1;
  15.         } else if (!(min_elem < n)) {
  16.             ++min_n;
  17.         }
  18.        
  19.         if (max_elem < n) {
  20.             max_elem = n;
  21.             max_n    = 1;
  22.         } else if (!(n < max_elem)) {
  23.             ++max_n;
  24.         }
  25.     }
  26.  
  27.     return std::make_pair(
  28.         std::make_pair(min_elem, min_n), std::make_pair(max_elem, max_n));
  29. }
  30.  
  31. template <typename InputIterator>
  32. auto minmax_element(InputIterator first, InputIterator last) {
  33.     return ::minmax_element(first, last, std::less<decltype(*first)> {});
  34. }
  35.  
  36. template <typename T>
  37. auto minmax_element(std::initializer_list<T> const& list) {
  38.     return ::minmax_element(std::begin(list), std::end(list));
  39. }
  40.  
  41. void main() {
  42.     minmax_element({10}); // ((10, 1), (10, 1))
  43.     minmax_element({10, 10}); // ((10, 2), (10, 2))
  44.     minmax_element({10, 1}); // ((1, 1), (10, 1))
  45.     minmax_element({1, 10}); // ((1, 1), (10, 1))
  46.     minmax_element({10, 1, 10}); // ((1, 1), (10, 2))
  47.     minmax_element({10, 10, 6, 7, 1, 1, 11}); // ((1, 2), (11, 1))
  48.     minmax_element({10, 1, 1, 0, 10, 10, 11}); // ((0, 1), (11, 1))
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement