C++中的字符串排序
我实现了自己的ls程序。这是终端中的示例输出: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 有没有办法根据文件名对其进行排序?目前,每次检查文件
-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;
});