ich habe eine Zahlenreihe, ein Array. Ich möchte die beiden höchsten Werte in diesem Array mit den zugehörigen Indizes zurückgeben. Aktuell lege ich das ganze Array in einer MultiMap<Wert,Index> Paar ab, da diese sowieso geordnet werden.
wenn ich dich richtig verstehe, hast du ein QArray oder ähnliches. Dieses enthält Integer in ungeordneter Reihenfolge. Du suchst den Index des größten bzw. kleinsten Wertes? Hier bietet sich std::max_element, std::min_element und std::distance an.
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> arr{ 3, 7, 2, 5, 6, 4, 9 };
auto first = arr.cbegin();
auto second = arr.cbegin();
for( auto it = first; it != arr.cend(); ++it) {
if( *it > *first ) { // if the current value is greater than the already stored:
second = first; // then the previous largest value is now the second largest
first = it; // and the current is the new largest
}
else if( *it > *second ) { // if the current value is greater than the stored second largest
second = it;
}
}
std::cout << "The largest element is " << *first << " at index " << std::distance( arr.cbegin(), first ) << std::endl;
std::cout << "The second largest element is " << *second << " at index " << std::distance( arr.cbegin(), second ) << std::endl;
}
Achtung: Es fehlt noch jede Fehlerbehandlung! Außerdem gibt diese Implementierung bei einem Array { 2, 1, 2 } die Werte 2 und 1 zurück. Ob das gewollt ist, hängt natürlich vom Anwendungsfall ab.