所以如果我可以使用向量,我会知道如何对它进行排序,但我们需要使用列表来实现它.我们的教授说我们可以使用已在列表类中实现的sort函数.如果它是一个向量,我可以创建一个结构,然后使用<algorithm>中的sort来查看我的列表,但它不会让我使用它,因为std :: list没有随机访问.API说"模板<class Compare>",但我认为这不会对我有所帮助.
我知道我可以使用sort函数,但我需要使用成员数据对它进行排序.我按极角对点进行排序,我需要使用当前Point作为我的类的成员作为"原点",所以我不能像往常那样使用静态排序比较器.
编辑我正在使用它作为我的排序调用:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在
c:\ users\wooly\documents\visual studio 2010\projects\proj5\proj5\grahamscan.cpp(20):错误C3867:'GrahamScan :: sorting':函数调用缺少参数列表; 使用'&GrahamScan :: sorting'创建指向成员的指针
因为我需要pointStack的最高值来进行排序,但它是我班级的成员.
如果您的值类型具有operator <defined,则可以直接调用sort函数.
std::list<int> myList;
// Do stuff to the list
myList.sort();
Run Code Online (Sandbox Code Playgroud)
或者如果不是,您需要提供一个将进行比较的仿函数.
struct MyClassComparator {
bool operator()(const MyClass& first, const MyClass& second) const {
// Return true if first should go before second
return true;
}
};
std::list<MyClass> myList;
// Do stuff to the list
myList.sort(MyClassComparator());
Run Code Online (Sandbox Code Playgroud)