-1

我正在玩 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;
}

但是排序是错误的......有人可以帮助我吗?

4

2 回答 2

3

结构的d_name字段dirent是 C 风格的字符串,而不是 C++ std::string。您无法将它们与<. 使用strcmp(3)

bool comparator (const dirent &a, const dirent &b)
{
    if (strcmp(a.d_name, b.d_name) < 0)
        return true;

    return false;
}
于 2013-06-11T18:32:27.853 回答
1

您正在d_namedirents. 这几乎肯定不是您想要的,因为向量的元素已经按指针顺序排序。你想strcmp改用。

于 2013-06-11T18:32:42.847 回答