упорядочить вектор точек на основе другого вектора

Я работаю над приложением C++.

У меня есть 2 вектора точек

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

Point2f определенtypedef Point_<float> Point2f;

vectorAll имеет 1000 баллов, а vectorSpecial — 10 баллов.

Первый шаг:

Мне нужно упорядочить точки в vectorSpecial в зависимости от их порядка в vectorAll. Что-то вроде этого:

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

Я могу сделать двойной цикл и сохранить индексы. а затем упорядочить точки на основе их индексов. Однако этот метод занимает слишком много времени, когда у нас много точек (, например, 10000 точек в vectorAll и 1000 точек в vectorSpecial, так что это десять миллионов итераций)

Каковы лучшие методы сделать это?

Второй этап:

Некоторые точки в vectorSpecial могут быть недоступны в vectorAll. Мне нужно взять ближайшую к ней точку (, используя обычную формулу расстоянияsqrt((x1-x2)^2 + (y1-y2)^2))

Это также можно сделать при зацикливании, но если у кого-то есть предложения по улучшению методов, я был бы признателен.

Большое спасибо за любую помощь

9
задан TemplateRex 29 June 2014 в 18:06
поделиться