2016-01-22 122 views
0

我想在下面的代碼中排序一個結構的向量。該結構有3個數據成員。我想從這些數據成員中加載一個向量,並由一個結構數據成員進行排序/排序。但是這不起作用。 我使用它作爲參考:http://www.cplusplus.com/reference/algorithm/sort/ 我會很感激任何幫助/指針鏈接去通過。謝謝。排序結構的矢量,降序或升序:C++

示例代碼:

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 

struct my_data { 
    int data_id; 
    string data_one; 
    string data_two; 
}; 

int main() { 
    vector<my_data> my_vector; 
    my_data new_data; 
    for (int i = 0; i < 3; i++) { 
     if (i == 0) { 
      new_data.data_id = i; 
      new_data.data_one = "BBBB"; 
      new_data.data_two = "bbbb"; 
      my_vector.push_back(new_data); 
     } 
     if (i == 1) { 
      new_data.data_id = i; 
      new_data.data_one = "AAAA"; 
      new_data.data_two = "aaaa"; 
      my_vector.push_back(new_data); 
     } 
     if (i == 2) { 
      new_data.data_id = i; 
      new_data.data_one = "CCCC"; 
      new_data.data_two = "cccc"; 
      my_vector.push_back(new_data); 
     } 
    } 
    // now, I want some help to sort my vector by "data_one", 
    // something like this (below sorting function)! 
    std::sort(my_vector.begin(), my_vector.end(), data_one); 
    for (int i = 0; i < my_vector.size(); i++) { 
     cout << my_vector[i].data_id 
      << "\t" << my_vector[i].data_one 
      << "\t" << my_vector[i].data_two << endl; 
    } 
} 

我期待從打印以下輸出脫節:

cout << my_vector[i].data_id << "\t" << my_vector[i].data_one << "\t" << my_vector[i].data_two << endl; 

2  AAAA  aaaa 
1  BBBB  bbbb 
3  CCCC  cccc 
+1

有沒有'的std :: sort'也不載體用C –

+0

得到它!但現在用C++修復。 –

回答

2

您需要爲sort工作提供了比較功能。

bool myfunction (my_data i, my_data j) { return (i.data_one < j.data_one); }

std::sort(my_vector.begin(),my_vector.end(),myfunction);

+0

感謝它完美,但:條件應該是:[i.data_one

+0

做得好,簡單但有幫助。 –