Ordnen Sie einen Vektor von Punkten basierend auf einem anderen Vektor

Ich arbeite an einer C ++ - Anwendung.

Ich habe 2 Vektoren von Punkten

vector<Point2f> vectorAll;
vector<Point2f> vectorSpecial;  

Point2f ist definierttypedef Point_<float> Point2f;

vectorAll hat 1000 Punkte, während vectorSpecial 10 Punkte hat.

Erster Schritt:

Ich muss die Punkte in vectorSpecial in Abhängigkeit von ihrer Reihenfolge in vectorAll bestellen. So etwas in der Art:

For each Point in vectorSpecial
    Get The Order Of that point in the vectorAll
    Insert it in the correct order in a new vector

Ich kann eine Doppelschleife machen und die Indizes speichern. und ordnen Sie dann die Punkte basierend auf ihren Indizes. Diese Methode dauert jedoch zu lange, wenn wir viele Punkte haben (z. B. 10000 Punkte in vectorAll und 1000 Punkte in vectorSpecial, das sind also zehn Millionen Iterationen).

Was sind bessere Methoden, um das zu tun?

Zweiter Schritt:

Einige Punkte in vectorSpecial sind möglicherweise nicht in vectorAll verfügbar. Ich muss den Punkt nehmen, der ihm am nächsten liegt (unter Verwendung der üblichen Entfernungsformel)sqrt((x1-x2)^2 + (y1-y2)^2))

Dies kann auch beim Schleifen gemacht werden, aber wenn jemand Vorschläge für bessere Methoden hat, würde ich es begrüßen.

Vielen Dank für jede Hilfe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage