按文件列表中的一部分行排序

时间:2017-07-06 14:57:29

标签: c++ sorting

这适用于C ++程序。我不完全确定如何制定我遇到的问题。这是一个学校作业,我不是只是朝着正确的方向寻找答案。我们需要读入一个75,000多行的文件,看起来与此类似:

人口普查局201,阿拉巴马州奥托加县| 9.84473419420788 | 1808 | 183.651479494869

人口普查区202,阿拉巴马州奥托加县| 3.34583234555866 | 2355 | 703.860730836106

人口普查道203,阿拉巴马州奥托加县| 5.35750339330735 | 3057 | 570.60159846447

其中我们需要按粗体排序最后一个数字(使用两个不同程序的快速和合并排序)。如果我只需要处理我设置的粗体数字,我就可以解决这个问题,但是我有一个问题就是将整个事情变成一个矢量或数组并且能够具体访问该部分并按其排序。冒这么长的风险,我不会发布到目前为止的代码。我就像一个如何攻击这个问题的概念。

2 个答案:

答案 0 :(得分:2)

我建议如下:
1.为每个字段创建一个具有一个成员的类或结构 2.为您的班级超载operator>> 3.创建班级的std::vector 4.将数据文件读入std::vector类对象。

您可以通过编写仿函数(函数对象)对std::vector进行排序,然后将该仿函数传递给std::sort算法。

答案 1 :(得分:1)

看看regex。您基本上需要匹配最后|之后的内容。

此模式应该有效(working example at regexr.com):

/\|([\d\.]+)$/gm

<强>解释

  • \|与文字|
  • 相匹配
  • (...)创建一个捕获组(这是您要提取的组)
  • [...]创建一个字符集
  • \d捕获数字
  • \.捕获文字. s
  • +告诉解析器抓取一个或多个先前的标记(在本例中为字符组)
  • $匹配行尾
  • gm分别与全局和多行匹配

因此,整个正则表达式表示从|开始匹配,然后将捕获组中的所有数字和.分组,直到行尾。