werte Rechts und Links von Maximum suchen (std::lower_bound)
-
Ich möchte in einem Datensatz die ersten Werte bzw die Positionen dazu haben die unterhalb eines Grenzwertes liegen:
std::vector<double>::const_iterator maxIter = std::max_element( array.begin(), array.end() ); std::vector<double>::const_iterator it; // find first element on left of maximum lower than threshold it = std::lower_bound (maxIter, array.begin(), threshold); size_t leftindex = std::distance(array.begin(), it); double leftValue = axis[leftindex];leider liefert mir das genau it = maxIter;
Kann es sein, das nicht von maxIter nach array.begin() gesucht wird weil begin kleiner ist als maxIter?
-
Ja.
-
Dann müßtest du wohl einen const_reverse_iterator verwenden:
std::vector<double>::const_reverse_iterator rev_maxIter = maxIter; it = std::lower_bound (rev_maxIter, array.rend(), threshold);Ich hoffe, lower_bound kommt damit klar...
Alternativ halt die Schleife gerade selber schreiben.
-
Äh...dir ist schon klar, dass std::lower_bound einen sortierten Bereich erwartet, oder? Und da du das größte Element im Vektor an den Beginn des Bereichs setzt, ist er das ausschließlich, wenn das größte Element am Anfang des Containers steht (es also das einzige Element im Bereich ist).
-
In dem Fall ist der Ansatz wirklich falsch, da ich einen Datensatz habe der eine zur Mitte maximale Kurve enthält - deren Breite ich bestimmen möchte. Ich habe es jetzt selber über simple Schleifen implementiert.