Как отсортировать по определенному параметру, используя C ++ пользовательскую функцию сравнения? - PullRequest
2 голосов
/ 23 марта 2020

Я пытаюсь отсортировать точки на плоскости по их полярному углу относительно точки О. Упрощенная версия кода выглядит следующим образом:

bool comparePolar(point A, point B, point O){
    //if point B lies to the left of the edge OA, return false
    //return true
}

Итак, как передать точку О в это функция при вызове функции сортировки, которая будет использовать comparePolar в качестве функции сравнения?

1 Ответ

2 голосов
/ 23 марта 2020

Вам необходимо создать функциональный объект, который содержит O (или ссылку на него). Самый простой способ - с помощью лямбды

// initialised wherever
std::vector<point> points;
point O;

// Capture O by value
auto cmp = [O](point A, point B) { return comparePolar(A, B, O); };
std::sort(points.begin(), points.end(), cmp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...