C++中的结构体vector排序

在包含了头文件#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

时间: 2024-08-05 23:12:56

C++中的结构体vector排序的相关文章

C++ list结构体变量排序

以下内容是自己整理的根据结构体里面的不同变量,对list排序的实例,若有问题可以留言.仅供参考. #include <iostream>#include <list>#include <algorithm> using namespace std; //声明结构体typedef struct testListSort{ int number; std::string name; char time[10]; int datalen; }stuTest; //结构体lis

关于c语言中的结构体使用偏移量求值问题

最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题, 结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的; 首先我们先看一下nginx中的那个让我迷惑的地方 ev =    (event_t*)((char*)node - offsetof(event_t, timer)); 这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址 说明一下: event_t是一个结构体 node 也是一个结构体 timer

[转]C#中的结构体与类的区别

C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 定义类的语法 1 class Person 2 { 3 private string name; 4 private int age; 5 6 public void SayHi() 7 { 8 Console.WriteL

C语言中的结构体和C++中的结构体以及C++中类的区别

c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.private.protected数据成员:定义了结构体之后,可以用结构体名来创建对象.但C中的结构体不允许有函数:也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数. 二.不同之处

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

C++中的结构体

http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7dHi9yhLhWeLsP4EwFW5_ c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.pr

黑马程序员-------oc中的结构体

oc中的结构体主要有CGPoint,CGSize,CGRect,NSRange; /* Points. */ struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; /* Sizes. */ struct CGSize { CGFloat width; CGFloat height; }; /* Rectangles. */ struct CGRect { CGPoint origin; CGSize s

浅析C#中的结构体和类

类和结构是 .NET Framework 中的常规类型系统的两种基本构造. 两者在本质上都属于数据结构.封装着一组总体作为一个逻辑单位的数据和行为. 数据和行为是该类或结构的"成员",它们包括各自的方法.属性和事件等 对于C/C++程序员来说.结构体和类的差别非常小.仅仅是结构体的默认成员变量为public,类的默认成员变量为private. 可是对于C#来说,结构体和类有非常多的不同. 首先来谈一谈为何须要结构体: 最主要的原因就是结构体有能力去管理.使用不同数据类型的组合. .NE

x264中重要结构体参数解释,参数设置,函数说明 &lt;转&gt;

x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html x264中重要结构体参数解释typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int         i_threads;       /* 并行编码多帧 */int         b_deterministic; /*是否允许非