2016-03-02 136 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(將使生活更容易)。