我有一个名为QList<QStringList>
的{{1}},其中每个sortme
中的第一个QString
是一个有效的整数作为字符串,例如:
QStringList
对于qsort,这是4.8使用而不是std:,我理解我想要一个比较函数。这就是我认为我需要写的内容:
exampleQStringList << "5" << "foo" << "bar"
然后:
bool MainWindow::qslLessThan(const QList<QStringList> &v1, const QList<QStringList> &v2)
{
// here I would get the first element.toInt() and return <
return(true);
}
我很遗憾,因为编译器抱怨&#34;错误:没有匹配函数来调用&#39; qSort(QList :: iterator,QList :: iterator,)&#39;&#34;&#34 ;即使我尝试对qSort(sortme.begin(), sortme.end(), qslLessThan);
和QList<QStringList>
进行排序,也是如此。
答案 0 :(得分:3)
首先,qsort()所需的函数必须是原始函数,而不是任何类的成员。其次,这个比较函数必须采用QStringList引用而不是QList引用,因为它是您要比较的QStringLists。
#include <QCoreApplication>
#include <QDebug>
bool lessThan( const QStringList& v1, const QStringList& v2 )
{
return v1.first() < v2.first();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QStringList> sortme;
QStringList entryOne = QStringList() << "1" << "foo1" << "bar1";
QStringList entryTwo = QStringList() << "2" << "foo2" << "bar2";
QStringList entryThree = QStringList() << "3" << "foo3" << "bar3";
sortme << entryTwo << entryOne << entryThree;
qSort( sortme.begin(), sortme.end(), lessThan );
// Print out the list data so we can see that it got sorted ok
for( int i = 0; i < sortme.size(); i++ )
{
QString data = sortme.at( i ).join( "," );
qDebug() << QString( "Item %1: %2" ).arg( i + 1 ).arg( data );
}
return a.exec();
}