C++中的字符串排序
Posted
技术标签:
【中文标题】C++中的字符串排序【英文标题】:String Sorting in C++ 【发布时间】:2014-05-30 21:51:39 【问题描述】:我实现了自己的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 list 之类的容器中,然后使用 stl sort?但是如何使用 stl sort 对文件名进行排序呢?
【问题讨论】:
在获得文件信息之前进行排序会更容易,因为您所拥有的只是文件名列表。 注意std::list
有一个专用的sort
成员函数; std::sort
对例如更有用vector
s 和数组。
【参考方案1】:
这取决于您获取文件信息的方式。如果您只是枚举容器,则需要将所有文件信息存储到某种结构中,然后对结果进行排序。
但是,如果您在某个时候拥有所有文件名并获取它们的属性,理想情况下您只想对该列表进行排序(再次存储整个内容并进行排序)。
std::sort
的重载带有一个比较函数,您可以使用它来手动比较两个项目。
【讨论】:
【参考方案2】:是的,要对结果进行排序,您(几乎)需要在排序之前将中间数据存储到某种容器中。
如果您总是(或至少默认情况下)要对一个特定字段进行排序,您可以指定 operator<
以根据该字段进行比较。如果您想支持对其他各种字段进行排序,您可以为每个字段指定比较函子,或者(如果您的编译器支持,则首选)使用 lambda 表达式来指定比较。
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;
);
【讨论】:
以上是关于C++中的字符串排序的主要内容,如果未能解决你的问题,请参考以下文章