对矢量<const char =“”* =“”>进行排序

时间:2018-06-15 11:23:47

标签: c++ vector const-char

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:

提前致谢。

1 个答案:

答案 0 :(得分:2)

正如评论所说,请勿使用char*。其次,您应该使用调试器。

sort()失败的原因是你根据指向内存的位置对指针进行排序,而不是使用指向的字符。

您可以使用谓词告诉sort()如何对对象进行排序:

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

但最好的方法绝对是使用string或直接path作为向量元素的类型。