Encontrar la posición del elemento máximo

82

¿Existe una función estándar que devuelva la posición (no el valor) del elemento máximo de una matriz de valores?

Por ejemplo:

Supongamos que tengo una matriz como esta:

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

Quiero una función que devuelva el entero de 3 que me diga que sampleArray[3]es el valor más grande en la matriz.

Faken
fuente

Respuestas:

134

En el STL, std::max_elementproporciona el iterador (que se puede usar para obtener el índice std::distance, si realmente lo desea).

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;
}
Stephen
fuente
5
¿Cuál es la complejidad temporal de usar la función distancia ()?
Abhipso Ghosh
Según los documentos , su complejidad se escala linealmente a menos que el iterador proporcionado sea a RandomAccessIterator, en cuyo caso es constante en el tiempo. En cualquier caso, la optimización se realiza internamente por usted.
Scorch
28

O, escrito en una línea:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));
Alex
fuente
Esto no funciona con matrices, que la pregunta sugiere como la estructura genérica que se utilizará, ya que las matrices no son tipos de clase y, por lo tanto, no tienen funciones miembro como .begin () o .end (). Creo que puede adaptar su código usando std :: begin (sampleArray) y std :: end (sampleArray) en lugar de sampleArray.begin () y sampleArray.end () si está usando un compilador que es lo suficientemente reciente, aunque personalmente prefiero la respuesta aceptada, ya que se ejecutaría sin importar qué versión de C ++ se use
Manjia
6

Puede usar la max_element()función para encontrar la posición del elemento máximo.

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
fuente
0

std::max_elementtoma dos iteradores que delimitan una secuencia y devuelve un iterador que apunta al elemento máximo en esa secuencia. Además, puede pasar un predicado a la función que define el orden de los elementos.

avakar
fuente