Если ваши данные хранятся в vector
, то использования обратного итератора должно быть достаточно, как уже предлагалось.
В более общем смысле стандартная библиотека не обеспечивает функцию min_element_last
, как это также отмечено в 1 .В этом отношении возможная реализация min_element_last
может выглядеть следующим образом:
template <typename I>
using ValueType = typename std::iterator_traits<I>::value_type;
template <typename I, typename R>
// I models ForwardIterator
// R models StrictWeakOrdering on ValueType<I>
I min_element_last(I first, I last, R cmp) {
if (first == last) return last;
I curr = first;
++first;
while (first != last) {
if (!cmp(*curr, *first)) {
curr = first;
}
++first;
}
return curr;
}
template <typename I>
// I models ForwardIterator
// ValueType<I> models TotallyOrdered
I min_element_last(I first, I last) {
using T = ValueType<I>;
return min_element_last(first, last, std::less<T>());
}
Преимуществом будет возможность использования min_element_last
также с итераторами, которые моделируют только концепцию ForwardIterator .