Skip to content
Snippets Groups Projects
Commit c23d410c authored by Max Lyon's avatar Max Lyon Committed by Patrick Schmidt
Browse files

add arg min and arg max methods to smart ranges

parent 6ac21207
No related branches found
No related tags found
No related merge requests found
...@@ -250,6 +250,37 @@ struct SmartRangeT ...@@ -250,6 +250,37 @@ struct SmartRangeT
return res; return res;
} }
/** @brief Compute minimal element.
*
* Computes the element that minimizes \p f.
*
* @param f Functor that is applied to all elements before comparing.
*/
template <typename Functor>
auto argmin(Functor&& f) -> HandleT
{
auto range = static_cast<const RangeT*>(this);
auto it = range->begin();
auto min_it = it;
auto end = range->end();
assert(it != end);
typename std::decay<decltype (f(std::declval<HandleT>()))>::type curr_min = f(*it);
++it;
for (; it != end; ++it)
{
auto val = f(*it);
if (val < curr_min)
{
curr_min = val;
min_it = it;
}
}
return *min_it;
}
/** @brief Compute maximum. /** @brief Compute maximum.
* *
* Computes the maximum of all objects returned by functor \p f. * Computes the maximum of all objects returned by functor \p f.
...@@ -275,6 +306,38 @@ struct SmartRangeT ...@@ -275,6 +306,38 @@ struct SmartRangeT
return res; return res;
} }
/** @brief Compute maximal element.
*
* Computes the element that maximizes \p f.
*
* @param f Functor that is applied to all elements before comparing.
*/
template <typename Functor>
auto argmax(Functor&& f) -> HandleT
{
auto range = static_cast<const RangeT*>(this);
auto it = range->begin();
auto max_it = it;
auto end = range->end();
assert(it != end);
typename std::decay<decltype (f(std::declval<HandleT>()))>::type curr_max = f(*it);
++it;
for (; it != end; ++it)
{
auto val = f(*it);
if (val > curr_max)
{
curr_max = val;
max_it = it;
}
}
return *max_it;
}
/** @brief Computes minimum and maximum. /** @brief Computes minimum and maximum.
* *
* Computes the minimum and maximum of all objects returned by functor \p f. Result is returned as std::pair * Computes the minimum and maximum of all objects returned by functor \p f. Result is returned as std::pair
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment