我试图排序一个list<CMail>(其中CMail是一些对象,对于这个问题的目的并不重要).现在,我想对它进行排序.我知道list有一个sort()函数,它使用标准运算符<等,或者给出比较函数.我确实有这样的功能.
我的功能
bool comp( const CMail & x ) const;
Run Code Online (Sandbox Code Playgroud)
如果我们考虑a.comp(b),则返回; ,如果a <b则为true,否则为false.此函数也是CMail类的一部分,因此也是CMail命名空间的一部分.
现在,我想使用这个排序功能,我正在使用
temp.sort( CMail::comp );
Run Code Online (Sandbox Code Playgroud)
温度是一个
list<CMail> temp;
Run Code Online (Sandbox Code Playgroud)
但是,编译器不允许我这样说
错误:无效使用非静态成员函数'bool CMail :: comp(const CMail&)const'
有谁看到问题可能在哪里?提前致谢 :)
比较必须是二元仿函数,可以比较列表的所有元素.成员函数CMail::comp不满足该要求.试试非会员.这可以根据您的会员实施CMail::comp:
bool comp(const CMail& lhs, const CMail& rhs )
{
return lhs.comp(rhs);
}
Run Code Online (Sandbox Code Playgroud)
然后
temp.sort(comp);
Run Code Online (Sandbox Code Playgroud)
或者,使用lambda:
temp.sort([](const CMail& lhs, const CMail& rhs ){return lhs.comp(rhs);});
Run Code Online (Sandbox Code Playgroud)