Соответствие «ближайший» должно быть указано немного лучше. Это могут быть, например, «минимальная квадратичная ошибка», «минимальная абсолютная ошибка», «максимальная корреляция», которые все дают разные результаты.
В зависимости от того, что подразумевается под «ближайшим», вам, возможно, придется пройти через все перестановки множества set2, что будет дорого. Если вы хотите использовать решение «сортировать оба набора», то возможный способ добиться этого в c ++ при сохранении порядка первого набора - создать вектор индексов в set1 и отсортировать его по значениям в set1 *. 1003 *
std::vector<double> set1{{57.5276,55.3756,24.2798,54.5989}};
std::vector<size_t> set1index(set1.size());
std::iota(set1index.begin(), set1index.end(), 0);
std::sort(set1index.begin(), set1index.end(), [&](size_t a, size_t b){return set1[a] < set1[b];});
Затем вы можете отсортировать set2 и использовать индексы для воссоздания порядка set1 со значениями set2.