Несортированные контейнеры Qt

У меня есть QVector, который должен хранить пути к файлам, например

"./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

Но вместо того, чтобы хранить его в указанном выше порядке, он хранится как

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

Как я могу сохранить путь к файлу изображения в числовой последовательности?


person Sayan Bera    schedule 06.04.2018    source источник


Ответы (1)


Вы можете сортировать, используя std::sort, в этом отношении я предполагаю, что базовое имя файла является целым числом.

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;

Примечание. В настоящее время использование qSort не рекомендуется, так как обычно оно медленнее, чем std::sort, для получения дополнительной информации см.: Производительность qsort или std::sort?

person eyllanesc    schedule 06.04.2018
comment
Рекомендовать qSort - person JustWe; 06.04.2018
comment
@Jiu прочитал это: stackoverflow.com/questions/4708105/, std::sort быстрее, чем qSort - person eyllanesc; 06.04.2018
comment
std::qsort != qSort. При этом qSort также не рекомендуется самой Qt, так что нет, не рекомендуйте qSort. - person rubenvb; 06.04.2018