C++ dirent.h中的排序算法
我在玩dirent库,我无法对目录列表进行排序 我有这个比较器功能:C++ dirent.h中的排序算法,c++,sorting,C++,Sorting,我在玩dirent库,我无法对目录列表进行排序 我有这个比较器功能: bool comparator (const dirent &a, const dirent &b) { return a.d_name<b.d_name; } 主要内容: int main (){ vector<dirent> dirs; DIR *dir; struct dirent *drnt = NULL; dir = opendir
bool comparator (const dirent &a, const dirent &b) {
return a.d_name<b.d_name;
}
主要内容:
int main (){
vector<dirent> dirs;
DIR *dir;
struct dirent *drnt = NULL;
dir = opendir("./");
if(dir)
{
while(drnt = readdir(dir))
{
dirs.push_back(*drnt);
//printf("%-20s\n", drnt->d_name);
}
closedir(dir);
}
else
{
printf("Can not open directory\n");
}
sort(dirs.begin(), dirs.end(), comparator);
cout << "+++++++++++++++++++++++" << endl;
for (int i = 0; i < dirs.size(); i++){
cout << dirs[i].d_name << endl;
}
return 0;
}
但这是错误的。。。有人能帮助我吗? < P>一个DILAND结构的DYNED字段是C风格字符串,而不是C++ STD::string。您不能将它们与进行比较,因为您正在对目录的d_name字段进行指针比较。这几乎肯定不是您想要的,因为向量的元素已经按指针顺序排序了。您想改用strcmp。太本地化了。并不是说这个问题没有被问过无数次。或者更确切地说,你可以将它们与
bool comparator (const dirent &a, const dirent &b)
{
if (strcmp(a.d_name, b.d_name) < 0)
return true;
return false;
}