2

I have a QVector, which should store filepaths, like

"./zThumbnail/1004.jpeg"
"./zThumbnail/1005.jpeg"
"./zThumbnail/1006.jpeg"
"./zThumbnail/1007.jpeg"
"./zThumbnail/1008.jpeg"
"./zThumbnail/1009.jpeg"
"./zThumbnail/101.jpeg"
"./zThumbnail/1010.jpeg"
"./zThumbnail/1011.jpeg"
"./zThumbnail/1012.jpeg"
"./zThumbnail/1013.jpeg"

QFileInfoList filelistinfo = dir.entryInfoList();
foreach (const QFileInfo &fileinfo, filelistinfo) {
imagePath.push_back(fileinfo.absoluteFilePath());
qDebug() << fileinfo.absoluteFilePath();
}


./abc/1.jpg
./abc/2.jpg
./abc/3.jpg
.
.
.
./abc/1209.jpg

But instead of storing it in the above order, it's storing like

./abc/1.jpg
./abc/10.jpg
./abc/100.jpg
./abc/1000.jpg
./abc/1001.jpg
.
.

How can I store the image filepath in numeric sequence?

Sayan Bera
  • 135
  • 2
  • 16

1 Answers1

5

You can sort using std::sort, for that matter I'm assuming that the base name of the file is an integer.

QFileInfoList filelistinfo = dir.entryInfoList();
for(const QFileInfo &fileinfo: filelistinfo) 
    imagePath.push_back(fileinfo.absoluteFilePath());

std::sort(imagePath.begin(), imagePath.end(),
          [](const QString & a, const QString & b) -> bool
{
    return QFileInfo(a).baseName().toInt() < QFileInfo(b).baseName().toInt();
});

qDebug()<<imagePath;

Note: using qSort is not recommended currently since it is generally slower than std::sort, for more information read: Performance of qsort vs std::sort?

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
  • Recommend [qSort](http://doc.qt.io/archives/qt-4.8/qtalgorithms.html#qSort) – JustWe Apr 06 '18 at 04:45
  • 2
    @Jiu read this: https://stackoverflow.com/questions/4708105/performance-of-qsort-vs-stdsort, std::sort is faster than qSort – eyllanesc Apr 06 '18 at 04:48
  • 4
    `std::qsort != qSort`. That being said, `qSort` is also deprecated by Qt themselves, so no, don't recomment [`qSort`](http://doc.qt.io/qt-5/qtalgorithms-obsolete.html). – rubenvb Apr 06 '18 at 05:38