2016-03-02 156 views
-1

我有一个C++列表对象,其中有4列数据,其中每列由空格分隔。它们分别是string,integer,integer和double类型。我如何按第一列和第四列对列表进行排序?按多列对C++列表排序

+1

一些代码在这里会很好。当你说C++列表时,你是什么意思?一个STL向量,列表或一些自制列表?您可能想要为数据对象重载一个运算符,但具体取决于您的实现 –

+0

我的意思是具有四个属性的对象的STL列表。这些属性的类型分别为string,integer,integer和double –

回答

4

使用该解析数据并返回的低于由第一比较对象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可能)并将其存储在数据成员中,因为每次在您的帮助函数中进行解析可能代价很高。

+0

1.我认为你的意思是if(a.first!= b.first)... 2.他可能想要重载

+0

@SignalEleven对不起,谢谢。是的,除非他稍后可能想以不同的方式排序。 –

1

创建数据的结构,然后根据Mohits的答案进行排序。 它可能看起来像

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

现在你可以通过使用一个仿函数进行排序。

输入使用stringstream(将使生活更容易)。