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 はメソッドのタイプを公開していません。これを使用して、new を imageSeq ベクターimageNameにプッシュしている間に最後のベクターと比較することができました 2) ベクター imageSeq を変更して文字列を取得し、再度ループすることはできません後で画像をロードします。これを行うと、使用されるスペースが増加します。paths

これらの画像をベクター内で並べ替えて、名前に従って配置するにはどうすればよいですか?

4

2 に答える 2

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]));
于 2013-01-14T18:42:52.633 に答える
1

名前を辞書順に並べ替えるには、次を使用しますstd::sort

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

ただし、辞書式の順序は、が の15.pngに来ることを意味します。これを解決するには、ファイル名が入ってくる正確な形式を知っていない限り、自明ではない自然な並べ替えコンパレータを実装する必要があります。その後、それに応じてそれらを解析できます。 2.png

于 2013-01-10T11:33:25.077 に答える