.. _sprout-algorithm-minmax: ############################################################################### minmax ############################################################################### Interface ======================================== .. sourcecode:: c++ template inline SPROUT_CONSTEXPR sprout::pair minmax(T const& a, T const& b); template inline SPROUT_CONSTEXPR sprout::pair minmax(T const& a, T const& b, Compare comp); Requires ======================================== | Type T shall be LessThanComparable. Returns ======================================== | ``pair(b, a)`` if b is smaller than a, and ``pair(a, b)`` otherwise. Remarks ======================================== | Returns ``pair(a, b)`` when the arguments are equivalent. Remarks ======================================== Examples ======================================== .. sourcecode:: c++ #include #include using namespace sprout; SPROUT_STATIC_CONSTEXPR auto input = array{{-1, 1}}; SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax(input[0], input[1]); static_assert(result.first == -1, "min value is -1."); static_assert(result.second == 1, "max value is 1."); Complexity ======================================== | Exactly one comparison. ------------------------------------------------------------------------------- Interface ======================================== .. sourcecode:: c++ template inline SPROUT_CONSTEXPR sprout::pair minmax(std::initializer_list t, Compare comp); template inline SPROUT_CONSTEXPR sprout::pair minmax(std::initializer_list t); Requires ======================================== | T is LessThanComparable and CopyConstructible and ``t.size() > 0``. Returns ======================================== | ``pair(x, y)``, where x has the smallest and y has the largest value in the initializer list. Remarks ======================================== | x is a copy of the leftmost argument when several arguments are equivalent to the smallest. | y is a copy of the rightmost argument when several arguments are equivalent to the largest. | If an implementation not support C++14 initializer_list (``SPROUT_NO_CXX14_INITIALIZER_LIST`` defined), then this function is not specified constexpr. Complexity ======================================== | At most ``(3/2) * t.size()`` applications of the corresponding predicate. | Recursive function invocations in *O(logN)* (logarithmic) depth. Header ======================================== | ``sprout/algorithm/minmax.hpp`` | Convenience header: ``sprout/algorithm.hpp``