2013-01-10 97 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]));