2010-06-01 3 views
44

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

Например:

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

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

Я хочу функцию, которая возвращает целое число, равное 3, который говорит мне, что sampleArray[3] это наибольшее значение в массиве.

ответ

74

В 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; 
} 
+0

Так эта функция возвращает указатель на позицию макс элемент? Как получить позицию в массиве элемента max? – Faken

+0

@Faken: Отредактировано для отображения. – Stephen

+1

Какова временная сложность использования функции distance()? –

1

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

4

Вы можете использовать функцию 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; 
} 
5

Или, написанный в одной строке (это должно идти как комментарий к ответу Стефана, однако моя репутация не достаточно):

std::cout << std::distance(sampleArray.begin(), std::max_element(sampleArray.begin(), sampleArray.end())) 
Смежные вопросы