Индекс минимального элемента в списке STD ::
-
13-12-2019 - |
Вопрос
Если у меня есть генеракодицетагкод, я могу получить индекс минимального элемента, вычитая два итератора:
int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();
.
Однако с контейнерами, у которых нет случайных итераторов доступа, например, генеракодицетагкод, это не работает.Конечно, можно что-то сделать вроде
int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));
.
Но тогда я должен повторять дважды через список.
Могу ли я получить индекс элемента с минимальным значением со стандартными алгоритмами STL, только один раз через список или мне нужно кодировать свой собственный фонд?
Решение
Вам придется написать свою собственную функцию, например:
template <class ForwardIterator>
std::size_t min_element_index ( ForwardIterator first, ForwardIterator last )
{
ForwardIterator lowest = first;
std::size_t index = 0;
std::size_t i = 0;
if (first==last) return index;
while (++first!=last) {
++i;
if (*first<*lowest) {
lowest=first;
index = i;
}
}
return index;
}
. Не связан с StackOverflow