Ich habe einen Vektor, der die Entfernung zu einem bestimmten Bezugspunkt entlang einer Linie speichert. Also möchte ich zum Beispiel den Index, wo die Entfernung 700 Meter oder der nächste Wert zu dieser Entfernung ist.Nächsten Punkt mit Untergrenze suchen ... aber Daten sind nicht sortiert
Ich habe angenommen, der Vektor ist sortiert, und verwendet lower_bound mit Erfolg.
Das Problem ist, dass im wirklichen Leben Fehler passieren, also kann ich nicht garantieren, dass ich immer einen sortierten Vektor habe, weil der Benutzer beim Speichern von Daten beispielsweise nicht der Zeile gefolgt ist.
Wie kann ich den nächsten Wert finden, wenn die Daten nicht sortiert sind?
Ein sortierter Vektor ist fast immer besser als ein Satz. –
Also würde ich eine Menge mit den Paaren (Vektorindex, Abstand) erstellen, lower_bound anwenden und den gewünschten Index wiederherstellen? Wäre das nicht komplexer als nur alle Vektorelemente in eine Schleife zu durchlaufen? –
@RomanRdgz: Ein 'std :: set' nimmt keine Paare, es nimmt nur ein Element, das selbst als Schlüssel fungiert. Sie missverstehen es mit' std :: map' welches Schlüssel-Wert-Paar. Auch eine sortierte 'std :: vector 'wird fast immer schneller sein als das Kopieren aller Elemente in ein' std :: set', klar sollte man das erstere und nicht das spätere verwenden. –