因此,如果我可以使用 vector ,我会知道如何对其进行排序,但我们需要使用列表来实现它。我们的教授说我们可以使用列表类中已经实现的排序功能。如果它是一个 vector ,我可以创建一个结构,然后使用 sort from < algorithm > 遍历我的列表,但它不会让我使用它,因为 std::list 没有随机访问。 API 显示“template< class Compare >”,但我认为这对我没有帮助。
我知道我可以使用排序功能,但我需要使用成员数据对其进行排序。我按极角对点进行排序,我需要使用属于我的类(class)的当前点作为“原点”,因此我不能像往常一样使用静态排序比较器。
编辑
我用这个作为我的排序电话:
sortedList.sort(排序);
这是我的功能:
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:\users\wooly\documents\visual studio 2010\projects\proj5\proj5\grahamscan.cpp(20): error C3867: 'GrahamScan::sorting': function call missing argument list; use '&GrahamScan::sorting' to create a pointer to member
因为我需要 pointStack 的最高值来进行排序,但它是我类(class)的成员。
最佳答案
如果您的值类型定义了运算符<,您可以直接调用排序函数。
std::list<int> myList;
// Do stuff to the list
myList.sort();
或者,如果不需要,您需要提供一个仿函数来进行比较。
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());
关于c++ - 如何对 std :list when you need member data? 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282166/