Так что я бы знал, как его отсортировать, если бы я мог использовать вектор, но мы должны реализовать его с помощью списка.Наш профессор сказал, что мы можем использовать функцию сортировки, уже реализованную в классе списка.Если бы это был вектор, я мог бы создать структуру, а затем использовать сортировку из <алгоритма>, чтобы пройти через мой список, но это не позволило бы мне использовать это, так как std :: list не имеет произвольного доступа.API говорит "template ", но я не думаю, что это поможет мне.
Я понимаю, что могу использовать функцию сортировки, но мне нужно использовать данные членов для ее сортировки.Я сортирую точки по их полярному углу, и мне нужно использовать текущую точку, которая является членом моего класса, в качестве «источника», поэтому я не могу использовать статический сортировочный компаратор, как обычно.
РЕДАКТИРОВАТЬ Я использую это как мой сортировочный вызов: sortedList.sort(sorting);
и вот моя функция:
bool sorting(const Point& p, const Point& q) {
Point z = pointStack.top();
Point u = Point(p.getX() - z.getX(), p.getY() - z.getY());
Point v = Point(q.getX() - z.getX(), q.getY() - z.getY());
double r = u.polarAngle();
double s = v.polarAngle();
if (r < s) {
return true;
} else {
return false;
}
}
Я продолжаю получать
c: \пользователи \ wooly \ Documents \ visual studio 2010 \ projects \ proj5 \ proj5 \ grahamscan.cpp (20): ошибка C3867: 'GrahamScan :: sorting': отсутствует список аргументов при вызове функции;используйте '& GrahamScan :: sorting', чтобы создать указатель на член
, так как для сортировки мне нужно верхнее значение pointStack, но оно является членом моего класса.