如何list.sort(成员函数);?

时间:2013-12-19 13:54:59

标签: c++ list sorting

我想使用sort的{​​{1}}函数,并使用“myClass”的成员函数进行排序,其中包含我要在排序时使用的属性。

std::list

然后我打电话给:struct node { int value; } class myClass { private: bool _available; public: myClass(); ~myClass(); private: bool compare(const node &first, const node &second) { if (_available == true) return (first.value < second.value); else return (first.value > second.value); } };

我得到了:list.sort(myClass::compare);

2 个答案:

答案 0 :(得分:4)

比较函数存在问题,因为您在其中使用私有成员变量。这意味着您无法真正使用静态成员函数或独立函数或lambda。

您还遇到一个问题,即比较函数是私有的,这意味着您必须从myClass对象实例中对集合进行排序。

第一个问题可以通过使用std::bind将成员函数绑定到特定对象实例来解决。第二个问题可以通过创建函数public(或通过从myClass类中的另一个成员函数排序)来解决。


您可以像这样使用std::bind

// Definition of `list` here somewhere

myClass myObject;

list.sort(std::bind(&myClass::compare, &myObject));

答案 1 :(得分:2)

因为myClass::compare不是静态方法。您必须将其设置为静态以将其作为排序的谓词传递。或者让它全球化。如果它是一个静态类方法,它也必须是公共的。

typedef struct  s_node
{
    int value;
    int t_node;
};

class myClass
{
private:
    bool _available;

public:
    myClass();
    ~myClass();

    static bool compare(const t_node &first, const t_node &second)
    {
        if (_available == true)
            return (first.value < second.value)
        else
            return (first.value > second.value)
    }
};

OR

typedef struct  s_node
{
    int value;
    int t_node;
};

class myClass
{
private:
    bool _available;

public:
    myClass();
    ~myClass();
};

bool compare(const t_node &first, const t_node &second)
{
    if (_available == true)
        return (first.value < second.value)
    else
        return (first.value > second.value)
}

你可以称之为:

list.sort( myClass:compare ); // first example

list.sort( compare ); // second example