Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对向量进行排序<;常量字符*>;_C++_Vector_Const Char - Fatal编程技术网

C++ 对向量进行排序<;常量字符*>;

C++ 对向量进行排序<;常量字符*>;,c++,vector,const-char,C++,Vector,Const Char,提前感谢。正如评论所说,不要使用char*。其次,您应该使用调试器 sort()失败的原因是您正在根据指针指向的内存位置对指针进行排序,而不是使用指向的字符 您可以使用谓词告诉sort()如何对对象进行排序: Path del file da inserire nel vettore:/srv/FD/super_tracker/tracks/180426163618363.txt Path del file da inserire nel vettore:/srv/FD/super_tracke

提前感谢。

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

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

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

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:
排序(开始(最终路径),结束(最终路径),
[](常量字符*a,常量字符*b){返回strcmp(a,b)<0;}
);

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

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

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

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

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:
排序(开始(最终路径),结束(最终路径),
[](常量字符*a,常量字符*b){返回strcmp(a,b)<0;}
);

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

这样使用临时指针和悬空指针是未定义的行为。使用
std::vector>
只要不要使用
const char*
.c_str()
,除非您绝对需要。使用strings在向量中存储路径,我将使用
vector
:-)没有技巧。不管怎样,当你使用
sort()
指针时,它们是按照地址顺序排序的,而不是按照它们指向的字母顺序排序的。多亏了大家,我想我会采用“字符串方法”。以这种方式使用临时指针和悬挂指针是未定义的行为。使用
std::vector>
只是不要使用
const char*
.c_str()
除非您绝对需要。使用strings在向量中存储路径,我将使用
vector
:-)没有技巧。无论如何,当你使用
sort()
指针时,它们会按照地址顺序排序,而不是按照它们指向的字母顺序。多亏了大家,我想我会使用“string metod”。它不能工作,
dir\u itr2->path().string()
对象的
成员
string()
通过值而不是引用返回对象,因此,临时对象被创建,在调用
c_str
之后,您有了悬空指针…它无法工作,
dir_itr2->path().string()
对象的
path
成员
string()
通过值而不是引用返回对象,所以临时对象被创建,在调用
c_str
之后,您有了悬空指针。。。
sort(begin(final_path), end(final_path), 
    [](const char* a, const char *b) { return strcmp(a, b) < 0; }
);