Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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++ dirent.h中的排序算法_C++_Sorting - Fatal编程技术网

C++ dirent.h中的排序算法

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

我在玩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("./");

    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;
}