C++ vector 排序

C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,下面的例子能很好的说明:  方法1:
  我们直接来看代码吧,比较简单,容易理解:
   #include "stdafx.h"
   #include   <vector>   
   #include   <algorithm> 
   #include <functional> 
    
  using   namespace   std;   
  struct AssessTypeInfo

    unsigned int m_uiType;   //类型ID
    char   m_szName[64];  //类型名称
    unsigned int m_uiTotal;   //总分数

bool   operator <  (const   AssessTypeInfo&   rhs   )  const   //升序排序时必须写的函数
  {   
     return   m_uiType   <   rhs.m_uiType; 
   }
    bool   operator >  (const   AssessTypeInfo&   rhs   )  const   //降序排序时必须写的函数
   {   
       return   m_uiType   >   rhs.m_uiType; 
    }
}
int   main()   
  {   
   vector<AssessTypeInfo >   ctn   ;   
   
   AssessTypeInfo a1;
   a1.m_uiType=1;
   AssessTypeInfo  a2;
   a2.m_uiType=2;

AssessTypeInfo  a3;
   a3.m_uiType=3;

ctn.push_back(a1);
   ctn.push_back(a2);
   ctn.push_back(a3);
   //升序排序
   sort(ctn.begin(), ctn.end(),less<AssessTypeInfo>())   ;   //或者sort(ctn.begin(), ctn.end())  默认情况为升序
   
   for   ( int  i=0;   i<3;   i++   )   
    printf("%d\n",ctn[i].m_uiType);

//降序排序
  sort(ctn.begin(), ctn.end(),greater<AssessTypeInfo>())   ;

for   ( int  i=0;   i<3;   i++   )   
    printf("%d\n",ctn[i].m_uiType);   
   
   
   return   0  ;   
  }
以上方法就可以实现升序排序,输出结果为 1  2   3  
降序排序结果3  2  1。
方法2 :  不修改结构体或类的定义部分,我们用函数对象来实现:
  #include "stdafx.h"
  #include   <vector>   
  #include   <algorithm> 
  #include <functional> 
    
  using   namespace   std;   
struct AssessTypeInfo
{
unsigned int m_uiType;   //类型ID
  char   m_szName[64];  //类型名称
unsigned int m_uiTotal;   //总分数
};

bool   lessmark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)   
  {   
      return   s1.m_uiType   <   s2.m_uiType;   
  } 
  bool   greatermark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)   
  {   
      return   s1.m_uiType   >   s2.m_uiType;   
  } 
int   main()   
  {   
   vector<AssessTypeInfo >   ctn   ;   
   
   AssessTypeInfo a1;
   a1.m_uiType=1;
   AssessTypeInfo  a2;
   a2.m_uiType=2;

AssessTypeInfo  a3;
   a3.m_uiType=3;

ctn.push_back(a1);
   ctn.push_back(a2);
   ctn.push_back(a3);

sort(ctn.begin(), ctn.end(),lessmark)   ;   //升序排序
   
   
   for   ( int  i=0;   i<3;   i++   )   
    printf("%d\n",ctn[i].m_uiType);   
   
   sort(ctn.begin(), ctn.end(),greatermark)   ;   //降序排序

return   0  ;   
  }

C++ vector 排序的更多相关文章

  1. 1016. Phone Bills (25) -vector排序(sort函数)

    题目如下: A long-distance telephone company charges its customers by the following rules: Making a long- ...

  2. 2.2 C语言_实现数据容器vector(排序功能)

    上一节我们说到我们己经实现了一般Vector可以做到的自动扩充,告诉随机存取,那么现在我们需要完成vector的一个排序的功能. 排序算法我们网上一百度哇~~!很常见的就有8大排序算法: 1.选择排序 ...

  3. NX二次开发-C++的vector排序去重用法

    #include <algorithm> //vector排序去重 sort( BoxNum.begin(), BoxNum.end()); BoxNum.erase(unique(Box ...

  4. STL之使用vector排序

    应用场景: 在内存中维持一个有序的vector: // VectorSort.cpp : Defines the entry point for the console application. #i ...

  5. C++中的结构体vector排序

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

  6. vector排序

    // VectorSort.cpp : Defines the entry point for the console application. // #include "stdafx.h& ...

  7. java.util.Vector排序

    Vector的排序: import java.util.*; class MyCompare implements Comparator //实现Comparator,定义自己的比较方法{public ...

  8. vector 排序

    #include <vector> #include <algorithm> 一.vector保存的是基础数据类型(int.char.float等) vector<int ...

  9. C++标准库 vector排序

    前天要做一个对C++ STL的vector容器做一个排序操作,之前一直把vector当做一个容量可自动变化的数组,是的,数组,所以打算按照对数组进行排序的方法:用快速排序或是冒泡排序等算法自己写一个排 ...

随机推荐

  1. 通过EntityFramework操作sqlite(DbFirst)

    记录一下通过 EntityFramework6 来操作sqlite过程 环境: visual studio 2017 .net 4.5 Console Application(项目类型) sqlite ...

  2. KVM虚拟机配置

    KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...

  3. [NOI2018]你的名字(后缀自动机+线段树合并)

    看到题目名字去补番是种怎么样的体验 我只会 \(68\) 分,打了个暴力.正解看了一会儿,发现跟 \([HEOI2016/TJOI2016]\) 字符串很像,用线段树合并维护 \(endpos\) 集 ...

  4. Android逆向进阶—— 脱壳的奥义(基ART模式下的dump)

    本文作者:i春秋作家HAI_ZHU 0×00 前言 市面上的资料大多都是基于Dalvik模式的dump,所以这此准备搞一个ART模式下的dump.HAI_的使用手册(各种好东西) Dalvik模式是A ...

  5. 转载:TCP/IP四层模型

    转载:TCP/IP四层模型 一. TCP/IP参考模型示意图 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用. 如图所示 ...

  6. 组件基础(插槽slot)—Vue学习笔记

    刚开始我们淡淡提过<slot></slot>现在深入了解一下. slot可以进行父组件传值到子组件. 比如:我们将hiboy通过<slot>传递到组件中. < ...

  7. Windows Phone开发手记-WinRT下分组拼音的实现

    Windows Phone版本号自升入8.1以来,开发者就多了一个选项,开发基于WinRT架构的WP或者Universal Windows App.然而开发框架转为WinRT后,很多原有的WP8基于S ...

  8. dockerfile简述

    作用 Dockerfile的内容是一坨可以执行的代码(或者说是指令)(docker的DSL),这些代码使得创建镜像的操作可以复用以及自动化. 指令格式 Dockerfile的指令格式很简单: INST ...

  9. ilspy反编译

    资料: http://www.cnblogs.com/JamesLi2015/archive/2011/09/08/2170519.html 软件: http://ilspy.net/

  10. 企业域的冗余设计①:DHCP冗余设计(上)

    在许多企业网络中,为了方便客户端IP地址的管理,通常采用的是自动获取的方式向DHCP服务器获得IP地址.为了保证DHCP服务器能够正常稳定地向客户端提供IP地址的租赁,DHCP服务器的冗余设计就显得格 ...