C++ vector 排序

2009-12-21 17:17

最近做的东西,要将vector 中的内容输出,结果发现有些文件被交替反复打开,所以就想吧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   ;
}

以上方法就可以实现升序排序,输出结果为 1   2 3  
降序排序结果3   2   1。
方法2是一种比较简单的方法。
以上两种方法您可根据您自己的需求选择,并且以上两种方法在VC++6.0环境下编译通过,也是自己在实践过程中的总结,如有不妥的地方,欢迎您指出,至于为什么这样使用,请参考 stl算法中sort 部分。

C++ vector 排序相关推荐

  1. LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

    1. 题目 有 n 个人,每个人都有一个 0 到 n-1 的唯一 id . 给你数组 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] ...

  2. 用sort对vector排序(转载)

    用sort对vector排序 #include<vector> #include<string> #include <iostream> #include < ...

  3. C++ 二维vector排序(sort用法)

    C++二维vector排序 sort 函数的使用 sort 函数的使用 自定义排序函数 (目标:对 二维vector<vector> points中第二个元素进行排序) static bo ...

  4. C++ vector排序

    使用sort()函数(要添加引用algorithm)可以很方便地对数组进行排序,搭配自定义的compare函数可以实现多种对数据进行排序的方式,同样,对vector排序也可以使用sort函数,一般来说 ...

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

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  6. c++ sort()函数对二维数组vector排序

    c++ sort()函数对二维数组vector排序 sort (first, last) 对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序. 对于一个一维的数组, ...

  7. 【C++】vector 排序

    vector 排序 1. 数组排序,元素为整数 2. 数组排序,元素为类 1. 数组排序,元素为整数 // 打印函数 void Print(vector<int>& nums) { ...

  8. java.util.Vector排序

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

  9. vector排序与查找

    本示例使用比较函数,函数对象进行vector的排序与查找操作. #include <algorithm> #include <vector> using namespace s ...

最新文章

  1. LocationDemo has leaked ServiceConnection 异常并且无法定位的时候
  2. matlab单元数组与结构体的区别,MATLAB中的结构体和单元数组
  3. 分布式任务队列 Celery — 深入 Task
  4. 前端开源项目周报0425
  5. 基于tensorflow框架的神经网络结构处理mnist数据集
  6. 第三次学JAVA再学不好就吃翔(part11)--基础语法之switch语句
  7. 计算机应用基础第2版在线作业1,计算机应用基础(第2版)在线作业(1)
  8. sql字符串拼接_Mybatis的SqlSession执行sql过程
  9. 计组之数据运算:5、加减运算与溢出判断
  10. 额外sql使用什么封装_为什么建立社区值得付出额外的努力
  11. python文件操作(路径、移动、复制、见目录)
  12. sql server2012中使用convert来取得datetime数据类型样式(全)
  13. 信号与系统相关知识回顾总结
  14. 山西台达plc可编程控制器_可编程控制器10(PLC)基本指令系统
  15. 一张图看晕人民的名义
  16. 性能优化之内存泄露(Memory Leak)常用分析工具(另3种)
  17. 谐波减速器的结构简图及传动比说明
  18. ios14测试版兼容软件,ios14描述文件
  19. mysql union update_MYSQL:union, 以及常用函数
  20. 摄像头对物体进行跟踪kcf算法

热门文章

  1. 年薪大佬带你如何使用maya和zbrush制作次世代女性角色?值得收藏
  2. 基于Python实现的主机远程控制
  3. 时代浪潮已经袭来 AI人工智能频频爆火 ChatGPT改变行业未来
  4. 下载android版趣步最新版,趣步app手机版-趣步下载 4.1.1 安卓版 - 河东软件园
  5. 摄像头的视频制式概念
  6. 物理学专业英语(词汇整理)--------06 光学和原子物理
  7. JavaMail发邮箱(多人发送,抄送多人,多附件发送)
  8. [Excel]Excel函数和用法(1)——绝对引用“$“的用法
  9. 澳大利亚国家航天局,一个为期4年GNSS资助计划
  10. ℬ悟透C++┇Puzzle记录