2010-06-01 20 views
44

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

Por ejemplo:

Supongamos que tengo una serie como esta:

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

Quiero una función que devuelve el número entero de 3 que me dice que sampleArray[3] es el valor más grande de la matriz.

Respuesta

74

En el STL, std::max_element proporciona el iterador (que se puede usar para obtener el índice con 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; 
} 
+0

Así que esta función devuelve un puntero a la posición del máximo ¿elemento? ¿Cómo obtengo la posición en la matriz del elemento max? – Faken

+0

@Faken: Editado para mostrar. – Stephen

+1

¿Cuál es la complejidad de tiempo de usar la función distance()? –

1

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

4

Puede usar la función max_element() para encontrar la posición del elemento 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

O, escrito en una sola línea (esto debe ir como un comentario a la respuesta de Esteban, sin embargo, mi reputación no es suficiente):

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