0

我正在通过我的程序扫描一个目录以获取一些图像及其路径。在目录中,图像按以下方式排列:

1.png 2.png 3.png 4.png 5.png etc.

扫描目录时:

for(int i=0;i<dir.numFiles();++i){
string path = dir.getPath(i);
imageSeq.push_back(CustomImage.loadImage(path));
}
private:
vector<CustomImages> imageSeq;

上面代码的问题是图像是从目录中随机提取出来的。我希望根据图像的名称对图像进行排序并推送到向量中。我在这里有一些限制:

1) CustomImage 没有公开一种方法,当我将 new 推入 imageSeq 向量imageName时,我可以用它与最后一个向量进行比较 2) 我无法修改向量 imageSeq 以接收字符串然后再次循环之后加载图像。这样做会增加占用的空间。paths

如何对向量中的这些图像进行排序,以便根据它们的名称排列它们?

4

2 回答 2

1

我想,您可以首先读取所有路径,对它们进行排序,然后遍历排序的向量,就像这样:

#include<algorithm>
...
vector<string> help_vector;
for(int i=0;i<dir.numFiles();++i){
    string path = dir.getPath(i);
    help_vector.push_back(path);
}
sort(help_vector.begin(),help_vector.end());

for(int i=0;i<help_vector.size();i++)
    imageSeq.push_back(CustomImage.loadImage(help_vector[i]));
于 2013-01-14T18:42:52.633 回答
1

要按字典顺序对名称进行排序,请使用std::sort

std::sort(imageSeq.begin(), imageSeq.end());

但是,按字典顺序将意味着15.png它将出现在 之前 2.png。为了解决这个问题,您需要实现一个自然的排序比较器,除非您知道文件名的确切格式,否则您可以相应地解析它们。

于 2013-01-10T11:33:25.077 回答