首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对矢量中的字符串路径进行排序

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

Stack Overflow用户
提问于 2013-01-10 11:28:44
回答 2查看 623关注 0票数 0

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

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

扫描目录时:

代码语言:javascript
运行
AI代码解释
复制
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来接受字符串,然后再次循环加载图像。这样做会增加占用的空间。

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

EN

回答 2

Stack Overflow用户

发布于 2013-01-10 11:33:25

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

代码语言:javascript
运行
AI代码解释
复制
std::sort(imageSeq.begin(), imageSeq.end());

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-14 18:42:53

我猜,你可以首先读取所有路径,对它们进行排序,然后迭代排序后的向量,就像这样:

代码语言:javascript
运行
AI代码解释
复制
#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]));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14256922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文