C++中的结构体vector排序

时间:2021-07-17 15:31:50

在包含了头文件#include <algorithm>之后,就可以直接利用sort函数对一个vector进行排序了:

 1 // sort algorithm example  
 2 #include <iostream>     // std::cout  
 3 #include <algorithm>    // std::sort  
 4 #include <vector>       // std::vector  
 5   
 6 bool myfunction (int i,int j) { return (i<j); }  
 7   
 8 struct myclass {  
 9   bool operator() (int i,int j) { return (i<j);}  
10 } myobject;  
11   
12 int main () {  
13   int myints[] = {32,71,12,45,26,80,53,33};  
14   std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33  
15   
16   // using default comparison (operator <):  
17   std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33  
18   
19   // using function as comp  
20   std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)  
21   
22   // using object as comp  
23   std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)  
24   
25   // print out content:  
26   std::cout << "myvector contains:";  
27   for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)  
28     std::cout << ' ' << *it;  
29   std::cout << '\n';  
30   
31   return 0;  
32 }  

但是当vector中的变量是结构体,并且需要按照结构体的某一个元素进行排序时,则需要进行一定的修改:

 

 1 #include "privateHeader.h"
 2 #include <string>
 3 #include <vector>
 4 #include <iostream>
 5 #include <algorithm>
 6 using std::string;
 7 using std::vector;
 8 using std::cout;
 9 using std::endl;
10 using namespace std;
11 
12 typedef struct
13 {
14     float score;
15     string file_name;
16     string all_file_name;
17 
18 }TFileProp;
19 
20 bool GreaterSort(TFileProp a, TFileProp b)
21 { 
22     return (a.score > b.score);
23 }
24 bool LessSort(TFileProp a, TFileProp b)
25 { 
26     return (a.score < b.score);
27 }
28 vector<TFileProp> VecFileProp;
29 
30 VecFileProp.push_back(tFileProp);    //对vector进行push操作
31 
32 std::sort(VecFileProp.begin(), VecFileProp.end(), GreaterSort);    //进行降序排序
33 std::sort(VecFileProp.begin(), VecFileProp.end(), LessSort);    //进行升序排序

 

还有一点,利用Iang传递参一个数据时,由于命令行接收的参数是以char** argv存储的,因此需要先进行强制类型转换,经过一个string作为中间的转换变量,最终转成int型,另外,我之前认为由于是char型的原因,应该主能传递0-255的参数,但是仔细想一下是不对的,因为无论是多大的数,都是以一个字符串传递进去的,然后string类型再进行强转的时候就转陈了int型,因此并不存在256的大小限制。

 1 int main(int argc, char** argv)
 2 {
 3     // 统计时间
 4     //timeStatistics();
 5 
 6     // 所有结果放到一个文件夹显示
 7     
 8     int num_save;
 9     if (argc == 2)
10     {
11         std::string thres = argv[1];
12         num_save = atof(thres.c_str());
13         //std::cout << "(int)argv[1] is " << argv[1];
14         //std::cout << "num_save is " << num_save;
15     }
16     else
17     {
18         num_save = 100;
19     }
20     showAllResult(num_save);
21     
22     
23     return 1;
24 }

 

 

 

参考:http://blog.csdn.net/zhouxun623/article/details/49887555