Нахождение позиции максимального элемента

83

Есть ли стандартная функция, которая возвращает позицию (не значение) максимального элемента массива значений?

Например:

Предположим, у меня есть такой массив:

sampleArray = [1, 5, 2, 9, 4, 6, 3]

Мне нужна функция, которая возвращает целое число 3, которое сообщает мне, что sampleArray[3]это наибольшее значение в массиве.

Подделка
источник

Ответы:

136

В STL std::max_elementпредоставляет итератор (который можно использовать для получения индекса std::distance, если вы действительно этого хотите).

int main(int argc, char** argv) {
  int A[4] = {0, 2, 3, 1};
  const int N = sizeof(A) / sizeof(int);

  cout << "Index of max element: "
       << distance(A, max_element(A, A + N))
       << endl;

  return 0;
}
Стивен
источник
5
Какова временная сложность использования функции distance ()?
Abhipso Ghosh 03
Согласно документации , его сложность линейно масштабируется, если только предоставленный итератор не является a RandomAccessIterator, и в этом случае он постоянен во времени. В любом случае оптимизация выполняется за вас.
Scorch
30

Или написано одной строкой:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));
Alex
источник
Это не работает с массивами, которые в вопросе предлагаются в качестве общей структуры, которая будет использоваться, поскольку массивы не являются типами классов и, следовательно, у них нет функций-членов, таких как .begin () или .end (). Я думаю, вы можете адаптировать свой код, используя std :: begin (sampleArray) и std :: end (sampleArray) вместо sampleArray.begin () и sampleArray.end (), если вы используете компилятор, который является достаточно свежим, хотя я лично предпочитаю принятый ответ, так как он будет работать независимо от того, какая версия C ++ используется
Manjia
6

Вы можете использовать max_element()функцию, чтобы найти позицию максимального элемента.

int main()
{
    int num, arr[10];
    int x, y, a, b;

    cin >> num;

    for (int i = 0; i < num; i++)
    {
        cin >> arr[i];
    }

    cout << "Max element Index: " << max_element(arr, arr + num) - arr;

    return 0;
}
rashedcs
источник
0

std::max_elementпринимает два итератора, ограничивающих последовательность, и возвращает итератор, указывающий на максимальный элемент в этой последовательности. Вы можете дополнительно передать предикат функции, которая определяет порядок элементов.

авакар
источник