2010-06-01 28 views
44

Gibt es eine Standardfunktion, die die Position (nicht den Wert) des max-Elements eines Wertefeldes zurückgibt?Die Position des max-Elements finden

Zum Beispiel:

Angenommen, ich habe ein Array wie folgt aus:

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

ich eine Funktion möchten, dass die ganze Zahl von 3 zurückgibt, die mir sagt, dass sampleArray[3] der größte Wert im Array ist.

Antwort

74

In der STL, std::max_element bietet den Iterator (der verwendet werden kann, um Index mit std::distance, wenn Sie es wirklich wollen).

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

Also diese Funktion einen Zeiger auf die Position des max zurück Element? Wie bekomme ich die Position auf dem Array des Max-Elements? – Faken

+0

@Faken: Bearbeitet zu zeigen. – Stephen

+1

Was ist die zeitliche Komplexität der Verwendung der Funktion distance()? –

1

std::max_element benötigt zwei Iteratoren, die eine Sequenz begrenzen und einen Iterator zurückgeben, der auf das maximale Element in dieser Sequenz zeigt. Sie können zusätzlich ein Prädikat an die Funktion übergeben, die die Reihenfolge der Elemente definiert.

4

Sie können max_element() Funktion verwenden, um die Position des Elements max zu finden.

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

Oder in einer Zeile geschrieben (dies als Kommentar zu Stephen Antwort gehen sollte, aber mein Ruf ist nicht genug):

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