c++ - 如何对 std :list when you need member data? 进行排序

标签 c++ list sorting

因此,如果我可以使用 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/

相关文章:

list - Haskell 从另一个等式中找到列表的长度

python - 将包含不同长度列表的字典转换为 2 列数据帧

php - 如何从 PHP 将变量传递到 MySQL 存储过程

c++ - 此排序数组代码导致最后一个元素消失

python - Pandas 函数排序不匹配

c++ - 为什么 C 编译器会丢弃我的 &0xFF 掩码?

c++ - 使用自定义 HLSL 着色器顶点着色器输入签名的 DirectX 工具包加载模型

c++ - DLL注入(inject)记事本

c++ - sf::Sprite 是白色矩形(纹理试图通过引用传递)

java - 推特列表 twitter4j