2013-01-10 73 views
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未露出的imageName类型的方法,利用该我可以使用而我推新paths入imageSeq矢量
2与最后矢量来比较)我不能修改矢量imageSeq以获取字符串,然后再次循环以加载图像。这样做会增加占用的空间。

如何这些图像的载体,让他们根据自己的名字排列排序?

+0

什么是'dir'以及如何使用它? – Dialecticus

+1

然后排序'第一dir'迭代之前。 – m0skit0

回答

1

人名字典顺序排序,请使用std::sort

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

不过,词典编纂顺序将意味着15.png2.png来之前。为了解决这个问题,你需要实现一个natural sort comparator,除非你知道确切格式的文件名来在这不平凡的,那么你就可以相应地解析他们。

+0

我的理解,你不能排序'imageSeq',因为它包含图像,而不是路径。 –

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]));