Знаходження положення елемента max


83

Чи існує стандартна функція, яка повертає позицію (не значення) елемента max у масиві значень?

Наприклад:

Припустимо, у мене є такий масив:

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
Яка часова складність використання функції відстань ()?
Абхіпсо Гош

Згідно з документами , це складність масштабується лінійно, якщо наданий ітератор не є a RandomAccessIterator, і в цьому випадку він є постійним у часі. У будь-якому випадку, оптимізація проводиться внутрішньо для вас.
Scorch

30

Або написано в один рядок:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));

Це не працює з масивами, які питання пропонує як загальну структуру, яку слід використовувати, оскільки масиви не є типами класів, і тому вони не мають таких функцій-членів, як .begin () або .end (). Я думаю, ви можете адаптувати свій код, використовуючи std :: begin (sampleArray) і std :: end (sampleArray) замість sampleArray.begin () та sampleArray.end (), якщо ви використовуєте досить недавній компілятор, хоча я особисто віддаю перевагу прийнятій відповіді, оскільки вона
діяла

6

За допомогою max_element()функції можна знайти положення елемента max.

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

0

std::max_elementприймає два ітератори, що обмежують послідовність, і повертає ітератор, що вказує на максимальний елемент у цій послідовності. Ви можете додатково передати предикат функції, яка визначає впорядкування елементів.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.