Qt 4.8:尝试将 QStringList 的第一个元素上的 QList<QStringList> 排序为整数
Qt 4.8: trying to sort QList<QStringList> on 1st element of QStringList as integer
我有一个名为 sortme
的 QList<QStringList>
,其中每个 QStringList
中的第一个 QString
是作为字符串的有效整数,例如:
exampleQStringList << "5" << "foo" << "bar"
对于 qsort,这是 4.8 使用的而不是 std:,我知道我想要一个比较函数。这是我认为我需要写的内容:
bool MainWindow::qslLessThan(const QList<QStringList> &v1, const QList<QStringList> &v2)
{
// here I would get the first element.toInt() and return <
return(true);
}
然后:
qSort(sortme.begin(), sortme.end(), qslLessThan);
很明显,我遗漏了一些东西,因为编译器会抱怨 "error: no matching function for call to 'qSort(QList::iterator, QList::iterator, )'",即使我正在尝试对 QList<QStringList>
进行排序,而 sortme
就是那个。
首先,qsort() 需要的函数必须是原始函数,而不是任何 class 的成员。其次,在您的情况下,此比较函数必须采用 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();
}
我有一个名为 sortme
的 QList<QStringList>
,其中每个 QStringList
中的第一个 QString
是作为字符串的有效整数,例如:
exampleQStringList << "5" << "foo" << "bar"
对于 qsort,这是 4.8 使用的而不是 std:,我知道我想要一个比较函数。这是我认为我需要写的内容:
bool MainWindow::qslLessThan(const QList<QStringList> &v1, const QList<QStringList> &v2)
{
// here I would get the first element.toInt() and return <
return(true);
}
然后:
qSort(sortme.begin(), sortme.end(), qslLessThan);
很明显,我遗漏了一些东西,因为编译器会抱怨 "error: no matching function for call to 'qSort(QList::iterator, QList::iterator, )'",即使我正在尝试对 QList<QStringList>
进行排序,而 sortme
就是那个。
首先,qsort() 需要的函数必须是原始函数,而不是任何 class 的成员。其次,在您的情况下,此比较函数必须采用 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();
}