使用比较函数,C ++排序编译错误

时间:2012-01-14 19:07:31

标签: c++ sorting

我自己写了一个sort()的比较函数。 我这样说的时候效果很好。

bool comp(string a, string b)
{
    ...;
}

int main()
{
    sort(...,...,comp);
}

但是,当我把所有这些都放在课堂上时,请说:

class Test {

public:
    bool comp(string a,string b)
    {
        ...;
    }
    vector <string> CustomSort(vector <string> str) {
        sort(...,...,comp);
    }
};

存在编译错误“没有匹配函数来调用'sort ......'。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:6)

X的任何非静态成员函数都有一个额外的参数 - 指向(constX的引用/指针,它变为this。因此,成员函数的签名不能被sort消化。您需要使用boost::bindstd::mem_funstd::mem_fun_ref。使用C ++ 11时,您可以使用std::bind

std::sort(..., ..., std::bind(&Test::comp, this, _1, _2));

考虑到这一点,在这种情况下,最好的解决方案是使你的comp函数保持静态,因为它根本不需要this。在这种情况下,您的原始代码将无需更改即可使用。