您的位置:首页 > 编程语言 > C语言/C++

C++中的结构体vector排序

2017-01-16 19:39 597 查看
在包含了头文件#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: