【问题标题】:Unsorted Qt containers未排序的 Qt 容器
【发布时间】:2018-09-16 00:36:03
【问题描述】:

我有一个 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
.
.

如何按数字顺序存储图像文件路径?

【问题讨论】:

    标签: qt qstring qvector qdir qfileinfo


    【解决方案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慢,更多信息请阅读:Performance of qsort vs std::sort?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多