qSort() 不适用于自己的比较函数
qSort() doesn't work with own compare function
我想使用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());
}
和一个包含 160 个元素的 QStringList QStringList childKeys;
当我调用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
谢谢大家!
Comparator 不能是 class 的方法(class 的方法需要调用它的对象)。您可以在 CStreamSetup
class:
中将 compareNames
定义为静态函数
class CStreamSetup {
static bool CStreamSetup::compareNames(const QString &s1, const QString &s2);
// ^^^
};
compareNames
的定义保持不变。
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);
//...
}
静态函数
成员函数需要是static
如果你想用它作为比较器:
static bool compareNames(const QString &s1, const QString &s2);
匿名函数 (lambda)
另一种方法(C++11 及更高版本)是使用 lambda:
qSort(childKeys.begin(), childKeys.end(), [this](const QString &s1, const QString &s2) {
return compareNames(s1, s2);
});
STL函数
旁注:根据 docs,qSort
已过时,Qt 建议改用 std::sort
。
我想使用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());
}
和一个包含 160 个元素的 QStringList QStringList childKeys;
当我调用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
谢谢大家!
Comparator 不能是 class 的方法(class 的方法需要调用它的对象)。您可以在 CStreamSetup
class:
compareNames
定义为静态函数
class CStreamSetup {
static bool CStreamSetup::compareNames(const QString &s1, const QString &s2);
// ^^^
};
compareNames
的定义保持不变。
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);
//...
}
静态函数
成员函数需要是static
如果你想用它作为比较器:
static bool compareNames(const QString &s1, const QString &s2);
匿名函数 (lambda)
另一种方法(C++11 及更高版本)是使用 lambda:
qSort(childKeys.begin(), childKeys.end(), [this](const QString &s1, const QString &s2) {
return compareNames(s1, s2);
});
STL函数
旁注:根据 docs,qSort
已过时,Qt 建议改用 std::sort
。