Как сохранить позицию результата min_element? - PullRequest
3 голосов
/ 13 февраля 2012

Как я могу сохранить значение min_element? Он говорит, что это прямой итератор, но я не могу понять, как его сохранить (присвоить переменной). Я хочу иметь доступ к нему по местоположению в векторе. Все, что я могу найти, это примеры использования фактического элемента (используя * min_element ()). Я пытался

iterator< forward_iterator_tag, vector<string> > min_word_iterator = min_element(first_words_in_subvecs.begin(), first_words_in_subvecs.end());

но это не сработало. Я собираюсь заменить элемент в этом индексе другим элементом.

Ответы [ 3 ]

5 голосов
/ 13 февраля 2012

Используйте это:

std::vector<T>::iterator minIt = std::min_element(v.begin(),v.end());
//where T is the type of elements in vector v.

T minElement = *minIt; //or T & minElement = *minIt; to avoid copy!

А в C ++ 11 (если ваш компилятор поддерживает ключевое слово auto), то это:

auto minIt = std::min_element(v.begin(), v.end());
//type of minIt will be inferred by the compiler itself

T minElement = *minIt; //or auto minElement = *minIt;
                       //or auto & minElement = *minIt; to avoid copy
4 голосов
/ 13 февраля 2012

Вы можете использовать расстояние , предоставленное stl, чтобы найти позицию.Вам нужно передать итератор, возвращенный min_element, чтобы получить позицию

См. Пример кода

#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
  vector<int> myvec;
  int i = 0;
  for (i=8; i>0; i--)
  {
      myvec.push_back (i*10);
  }

  for (i=0; i<8; i++)
  {
      cout<<"At pos :"<<i<<"|val is:"<<myvec.at(i)<<endl;
  }

  int min_pos = distance(myvec.begin(),min_element(myvec.begin(),myvec.end()));
  cout << "The distance is: " << min_pos << "|value is "<<*min_element(myvec.begin(),myvec.end())<<endl;

  return 0;
}
0 голосов
/ 13 февраля 2012

Если у вас есть два итератора с произвольным доступом, вы обычно можете вычесть один из другого, чтобы найти расстояние между ними.Таким образом, получив итератор it, вы можете найти индекс элемента, на который он ссылается, с помощью it - my_vector.begin().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...