C++中的字符串排序

C++中的字符串排序,c++,sorting,stl,C++,Sorting,Stl,我实现了自己的ls程序。这是终端中的示例输出: -rwxr-xr-x 1 2255 May 14 05:54 rc -rwxr-xr-x 1 27271 Oct 01 05:25 rc.sysinit -rwxr-xr-x 1 548752 Feb 23 05:34 rmt -rwxr-xr-x 1 742 Oct 01 14:28 auto.smb -r-xr-xr-x 1 2346 Sep 16 14:33 iptables.rules 有没有办法根据文件名对其进行排序?目前,每次检查文件

我实现了自己的ls程序。这是终端中的示例输出:

-rwxr-xr-x 1 2255 May 14 05:54 rc
-rwxr-xr-x 1 27271 Oct 01 05:25 rc.sysinit
-rwxr-xr-x 1 548752 Feb 23 05:34 rmt
-rwxr-xr-x 1 742 Oct 01 14:28 auto.smb
-r-xr-xr-x 1 2346 Sep 16 14:33 iptables.rules

有没有办法根据文件名对其进行排序?目前,每次检查文件信息文件类型、权限、大小等后,我都会立即打印数据。我是否需要将信息保存到类似stl列表的容器中,然后使用stl排序?但是如何使用stl排序对文件名进行排序?

这取决于您如何获取文件信息。如果只是枚举容器,则需要将所有文件信息存储到某种结构中,然后对结果进行排序

但是,如果您在某个时候拥有所有文件名并获取它们的属性,理想情况下,您只需再次对该列表进行排序,存储整个内容并进行排序


std::sort有一个重载,它使用一个比较函数,您可以使用该函数手动比较两个项目。

是的,要对结果进行排序,您几乎需要在排序之前将中间数据存储到某种容器中

如果您总是或至少在默认情况下要对一个特定字段进行排序,则可以指定operatorIt,以便在获取文件信息之前进行排序,因为您只有一个文件名列表;排序对于向量和数组更有用。
class file {
    std::string name;
    // ... 
public:
    bool operator<(file const &other) const { 
        return name < other.name;
    }
};

// ...
std::vector<file> files;

// sort by name (default order):
std::sort(files.begin(), files.end());

// sort by a "size" member (which needs to be accessible):
std::sort(files.begin(), files.end(), 
    [](file const &a, file const &b) { 
        return a.size < b.size; 
    });