Вопрос

Если у меня есть генеракодицетагкод, я могу получить индекс минимального элемента, вычитая два итератора:

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;
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top