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.

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

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()));

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

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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.