как отсортировать вектор pair по модулю элементов?
у меня задача на нахождения двух самых ближних точек к началу координат
координаты не все положительные, естественно
хотел отсортировать по модулям элементов, потом взять две первые (минимальные) и вывести
не могу сделать сортировку по модулям
сделал так, но не работает sort(V.begin(), V.end(), [](pair<float,float> a, pair<float, float> b) { return abs(a) < abs(b);});
подскажите как правильнее было бы
Ответы (1 шт):
abs для pair вы сами перегрузили? Если нет, то учтите, что стандартная функция abs с парами работать не умеет. Или пишите
floaf abs(pair<float,float> a) {
return sqrt(a.first*a.first+a.second*a.second); }
или
floaf abs(pair<float,float> a) { return hypot(a.first, a.second); }
(второй вариант работает даже там, где первый в переполнение вылетит, но медленнее), либо сразу правильно пишите лямбду -
[](const pair<float,float>& a, const pair<float, float>& b) {
return a.first*a.first+a.second*a.second <
b.first*b.first+b.second*b.second;}
Сортировать, кстати, - не самый эффективный способ. См. этот ответ.