对向量中的字符串路径进行排序

时间:2013-01-10 11:28:44

标签: c++ algorithm

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

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以接收字符串然后再次循环以加载图像。这样做会增加空间。

如何对矢量中的图像进行排序,以便根据其名称进行排列?

2 个答案:

答案 0 :(得分:1)

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

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

但是,词典顺序意味着15.png将在 2.png之前来到。要解决这个问题,你需要实现一个natural sort comparator,除非你知道文件名的确切格式,否则你可以相应地解析它们。

答案 1 :(得分: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]));