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.

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

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

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

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.