我想使用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);
答案 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