найти ближайшее местоположение из исходной точки

Предположим, у нас есть следующая проблема - мы хотим прочитать набор (x, y) координат и имя, затем отсортировать их по порядку, увеличив расстояние от начала координат (0 0). Вот алгоритм, который использует простейшую пузырьковую сортировку:

 #include<iostream>
    #include <algorithm>
    using namespace std;
    struct point{
        float x;
        float y;
         char name[20];

         };
      float dist(point p){
          return p.x*p.x+p.y*p.y;
            }
       void sorting(point pt[],int n){
          bool doMore = true;
        while (doMore) {
            doMore = false;  // Assume no more passes unless exchange made.
            for (int i=0; i<n-1; i++) {
                if (dist(pt[i]) > dist(pt[i+1])) {
                    // Exchange elements
                    point temp = pt[i]; pt[i] = pt[i+1]; pt[i+1] = temp;
                    doMore = true;  // Exchange requires another pass.
                }
            }
        }

       }
       void display(point pt[],int n){
            for (int i=0;i<n;i++){
                cout<<pt[i].name<< " ";
                   }
       }
    int main(){
    point pts[1000];
    int n=0;

    while (cin>>pts[n].name>>pts[n].x>>pts[n].y){
        n++;

    }
     sorting(pts,n);
     display(pts,n);

    return 0;
    }

Но я хочу написать алгоритм сортировки STL вместо пузырьковой сортировки. Как это сделать?

Я имею в виду, как использовать функцию dist в алгоритме сортировки STL?

7
задан Murphy 23 February 2018 в 09:29
поделиться

2 ответа

Функция сортировки STL std::sort может принимать определяемую пользователем функцию сравнения (или объект функции) в качестве необязательного третьего аргумента. Итак, если у вас есть элементы, например:

vector<point> points;

Вы можете отсортировать их, вызвав:

sort(points.begin(), points.end(), my_comp);

где my_comp() — функция со следующим прототипом:

bool my_comp(const point &a, const point &b)
8
ответ дан 7 December 2019 в 01:14
поделиться
#include <algorithm>

bool sort_by_dist(point const& p1, point const& p2) {
    return dist(p1) < dist(p2);
}

...

std::sort(pt, pt + n, sort_by_dist);
2
ответ дан 7 December 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: