Ermitteln der Position des max-Elements

82

Gibt es eine Standardfunktion, die die Position (nicht den Wert) des max-Elements eines Array von Werten zurückgibt?

Zum Beispiel:

Angenommen, ich habe ein Array wie dieses:

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

Ich möchte eine Funktion, die die Ganzzahl 3 zurückgibt, die mir sagt, dass dies sampleArray[3]der größte Wert im Array ist.

Gefälscht
quelle

Antworten:

134

Stellt in der STL std::max_elementden Iterator bereit (mit dem der Index abgerufen werden kann std::distance, wenn Sie dies wirklich möchten).

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
quelle
5
Was ist die zeitliche Komplexität der Verwendung der Funktion distance ()?
Abhipso Ghosh
Laut den Dokumenten skaliert die Komplexität linear, es sei denn, der bereitgestellte Iterator ist ein RandomAccessIterator. In diesem Fall ist er zeitlich konstant. In jedem Fall erfolgt die Optimierung intern für Sie.
Scorch
28

Oder in einer Zeile geschrieben:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));
Alex
quelle
Dies funktioniert nicht mit Arrays, die in der Frage als generische Struktur vorgeschlagen werden, da Arrays keine Klassentypen sind und daher keine Elementfunktionen wie .begin () oder .end () haben. Ich denke, Sie können Ihren Code anpassen, indem Sie std :: begin (sampleArray) und std :: end (sampleArray) anstelle von sampleArray.begin () und sampleArray.end () verwenden, wenn Sie einen Compiler verwenden, der aktuell genug ist, obwohl ich
Ich
6

Mit der max_element()Funktion können Sie die Position des max-Elements ermitteln.

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;
}
Hautausschläge
quelle
0

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

Avakar
quelle