【问题标题】:Sorting a C++ list by multiple columns按多列对 C++ 列表进行排序
【发布时间】:2016-03-02 04:57:18
【问题描述】:

我有一个包含 4 列数据的 C++ 列表对象,其中每列由空格分隔。它们分别是字符串、整数、整数和双精度类型。如何按第一列然后按第四列对列表进行排序?

【问题讨论】:

  • 这里有一些代码会很好。当您说 C++ 列表时,您是什么意思? STL 向量、列表或一些自制的列表?您可能希望为您的数据对象重载一个运算符,但具体如何取决于您的实现
  • 我的意思是一个具有四个属性的对象的 STL 列表。属性分别为string、integer、integer、double类型

标签: c++ list sorting


【解决方案1】:

使用谓词函数解析数据并通过比较对象 1 和对象 2 返回小于的结果。

struct sorter1432
{
   bool operator()(const Data &a, const Data &b)
   {
      if(a.first != b.first) return a.first < b.first  // string comparision
      if(a.fourth != b.fourth) return a.fourth < b.fourth  // double comparision
      if(a.third != b.third) return a.third < b.third  // int comparision
      if(a.second != b.second) return a.second < b.second  // int comparision
      return false;  // Equal
   }
};
...
lst.sort(sorter1432);

关于您解析的第一个、第二个、第三个和第四个成员(可能使用stringstream)并将其存储在数据成员中,因为每次在您的辅助函数中解析可能代价高昂。

【讨论】:

  • 1.我认为您的意思是 if (a.first != b.first)... 2. 他可能想重载
  • @SignalEleven 好的,谢谢。是的,除非他以后可能想以不同的方式进行排序。
【解决方案2】:

制作数据结构,然后根据 Mohits 的回答进行排序。 它可能看起来像

struct s_data{
string str;
int a;
int b;
double c;
};

现在您可以使用仿函数进行排序。

输入使用字符串流(会让生活更轻松)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2012-12-12
    • 1970-01-01
    • 2018-10-02
    • 2015-06-28
    • 2021-02-07
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多