排序算法在direct.h

Sort algorithm in dirent.h

本文关键字:direct 算法 排序      更新时间:2023-10-16

我在玩不同的库,我不能排序我的目录列表

我有这个比较器函数:

bool comparator (const dirent &a, const dirent &b) {
        return a.d_name<b.d_name;
}

和main:

int main (){
    vector<dirent> dirs;
    DIR *dir;
    struct dirent *drnt = NULL;
    dir = opendir("./");
    if(dir)
        {
                while(drnt = readdir(dir))
                {
                        dirs.push_back(*drnt);
                        //printf("%-20sn", drnt->d_name);
                }
                closedir(dir);
        }
        else
        {
                printf("Can not open directoryn");
        }
        sort(dirs.begin(), dirs.end(), comparator);
        cout << "+++++++++++++++++++++++" << endl;
        for (int i = 0; i < dirs.size(); i++){
                cout << dirs[i].d_name << endl;
        }    
    return 0;
}

但是排序是错误的…有人能帮帮我吗?

dirent结构体的d_name字段是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;
}

您正在对direntsd_name字段进行指针比较。这几乎肯定不是您想要的,因为vector的元素已经按指针顺序排序了。您需要使用strcmp