我正在通过我的程序扫描一个目录,以拾取一些图像及其路径。在目录中,图像按以下方式排列:
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没有公开imageName
类型的方法,在将新的paths
推送到imageSeq向量中时,可以使用该方法与上一个向量进行比较
2)我不能修改向量imageSeq来接受字符串,然后再次循环加载图像。这样做会增加占用的空间。
如何对矢量中的这些图像进行排序,以便根据它们的名称进行排列?
发布于 2013-01-10 11:33:25
要按字典顺序对名称进行排序,请使用std::sort
std::sort(imageSeq.begin(), imageSeq.end());
然而,词典编排顺序将意味着15.png
将排在2.png
之前。要解决这个问题,您需要实现一个natural sort comparator,除非您知道文件名的确切格式,否则它不是微不足道的,然后可以相应地解析它们。
发布于 2013-01-14 18:42:53
我猜,你可以首先读取所有路径,对它们进行排序,然后迭代排序后的向量,就像这样:
#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]));
https://stackoverflow.com/questions/14256922
复制相似问题