qSort() 不适用于自己的比较函数



我想按如下方式使用qSort()

我有一个比较函数叫做

bool CStreamSetup::compareNames(const QString &s1, const QString &s2)
{
QString temp1 = s1.section("Stream", 1);
temp1 = temp1.section('_', 0, 0);
QString temp2 = s2.section("Stream", 1);
temp2 = temp2.section('_', 0, 0);
return (temp1.toInt() < temp2.toInt());
}

和一个名为QStringList childKeys;的包含160个元素的QStringList

当我如下调用QSort函数时:

qSort(childKeys.begin(), childKeys.end(), compareNames);

出现以下错误。

'compareNames': non-standard syntax; use '&' to create a pointer to member
'qSort': no matching overloaded function found
'void qSort(Container &)': expects 1 arguments - 3 provided
'void qSort(RandomAccessIterator, RandomAccessIterator)' expects 2 arguments - 3 provided

谢谢你们!

静态函数

如果您想将成员函数用作比较器,则它需要是static

static bool compareNames(const QString &s1, const QString &s2);

匿名函数(lambda(

另一种方法(C++11及更高版本(是使用lambdas:

qSort(childKeys.begin(), childKeys.end(), [this](const QString &s1, const QString &s2) {
return compareNames(s1, s2);
});

STL函数

附带说明:根据文档,qSort已过时,Qt建议使用std::sort

Comparator不能是类的方法(类的方法需要为其调用的对象(。您可以在CStreamSetup类中将compareNames定义为静态函数:

class CStreamSetup {
static bool CStreamSetup::compareNames(const QString &s1, const QString &s2);
// ^^^
}; 

CCD_ 8的定义保持不变。

bool CStreamSetup::compareNames(const QString &s1, const QString &s2)
{
QString temp1 = s1.section("Stream", 1);
//...
}

或者您可以将比较器定义为自由函数:

bool compareNames(const QString &s1, const QString &s2)
{
QString temp1 = s1.section("Stream", 1);
//...
}

最新更新