Сортировка вектора & lt; const char * & gt;

for ( fs::directory_iterator dir_itr2( out_folder ); dir_itr2 != end_iter; ++dir_itr2 )
{
cout << "Path del file da inserire nel vettore:" << dir_itr2->path().string().c_str() << endl;
final_path.push_back(dir_itr2->path().string().c_str());}

sort( final_path.begin(), final_path.end() );
cout << "Vettore di path da aprire in ordine" << endl;
for(vector<const char *>::iterator fp_itr2=final_path.begin(); fp_itr2!=final_path.end(); ++fp_itr2)
{
cout << "Path: " << *fp_itr2 << endl;
}

Здесь я попытался поместить свой путь в вектор, потому что мне нужен ординатный список, но вывод cout следующий:

Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180426163618363.txt
Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180426163654027.txt
Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180530150135770.txt
Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180426163414599.txt
Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180530150235481.txt
Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180530150132796.txt
Path:
Path:
Path:
Path:
Path:
Path:

Заранее спасибо.

0

Решение

Как говорится в комментариях, не используйте char*, Во-вторых, вы должны использовать отладчик.

Причина ваша sort() Ошибка состоит в том, что вы сортируете указатели по расположению в памяти, на которое они указывают, вместо использования указанных символов.

Вы можете использовать предикат, чтобы сказать sort() как отсортировать ваши объекты:

sort(begin(final_path), end(final_path),
[](const char* a, const char *b) { return strcmp(a, b) < 0; }
);

Но лучший курс определенно использовать string или напрямую path как тип векторных элементов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector