前天要做一个对C++ STL的vector容器做一个排序操作,之前一直把vector当做一个容量可自动变化的数组,是的,数组,所以打算按照对数组进行排序的方法:用快速排序或是冒泡排序等算法自己写一个排序的函数。后来觉得STL这么强大,应该有它自己的排序方法(没有好好学习啊),然后就去google了一下,果然有,而且可以自定义排序的函数,太强大了(而且效率应该比我自己写的要好吧)。

  1. // VectorSort.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. //先自定义一个结构体
  8. struct Test {
  9. int member1;
  10. int member2;
  11. };
  12. //自定义排序函数
  13. bool SortByM1( const Test &v1, const Test &v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致
  14. {
  15. return v1.member1 < v2.member1;//升序排列
  16. }
  17. void MyPushback(std::vector<Test> & vecTest, const int &m1, const int &m2)
  18. {
  19. Test test;
  20. test.member1 = m1;
  21. test.member2 = m2;
  22. vecTest.push_back(test);
  23. }
  24. void PrintVector( std::vector<Test> & vec)
  25. {
  26. /*
  27. 插一句,
  28. vec.begin()对应的位置是向量的第一个位置,
  29. vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置)
  30. 文档上的定义:Returns an iterator referring to the past-the-end element in the vector container.
  31. */
  32. for(std::vector<Test>::iterator it = vec.begin() ; it != vec.end() ; it++ )
  33. {
  34. std::cout<<it->member1<<'\t'<<it->member2<<std::endl;
  35. }
  36. }
  37. int _tmain(int argc, _TCHAR* argv[])
  38. {
  39. std::vector<Test> vecTest;
  40. MyPushback(vecTest,9,1);
  41. MyPushback(vecTest,8,2);
  42. MyPushback(vecTest,7,3);
  43. MyPushback(vecTest,6,4);
  44. MyPushback(vecTest,5,5);
  45. MyPushback(vecTest,4,6);
  46. MyPushback(vecTest,3,7);
  47. MyPushback(vecTest,2,8);
  48. MyPushback(vecTest,1,9);
  49. //排序之前
  50. std::cout<<"Before Sort:"<<std::endl;
  51. PrintVector(vecTest);
  52. std::cout<<"对向量中的所有元素按member1进行升序排列:"<<std::endl;
  53. std::sort(vecTest.begin(),vecTest.end(),SortByM1);
  54. PrintVector(vecTest);
  55. //std::cout<<"对向量中的第2个到第5个元素按member1进行升序排列:"<<std::endl;
  56. //std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5为第6个位置
  57. //PrintVector(vecTest);
  58. return 0;
  59. }

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

  1. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  2. c/c++ 标准库 vector

    c/c++ 标准库 vector 标准库 vector的小例子 test1~test7 #include <iostream> #include <vector> using ...

  3. C++标准库vector类型的使用和操作总结

    vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...

  4. C++ Primer 有感(标准库vector及迭代器)

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  5. C++标准库vector以及迭代器

    今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...

  6. C++标准库vector及迭代器

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  7. 在stm32开发可以调用c标准库的排序和查找 qsort bsearch

    在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...

  8. C++标准库vector类型详解

    Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...

  9. c++标准库vector&list使用练习

    /* vector顺序存储,随机访问快 list链表存储,插入删除快 deque占用内存多,兼具两者优点 注意: 1.vector严格顺序存储 2.list的迭代器只能做++或--运算,要一次移动多个 ...

随机推荐

  1. cocos2d-x 2.2.3 建project

    2.2以后不再使用模板安装了. 打开终端,进入cocos2d-x文件夹下的tools/project-creator,运行命令 ./create_project.py -project [项目名] - ...

  2. BestCoder Round #56/hdu5463 Clarke and minecraft 水题

    Clarke and minecraft 问题描述 克拉克是一名人格分裂患者.某一天,克拉克分裂成了一个游戏玩家,玩起了minecraft.渐渐地,克拉克建起了一座城堡. 有一天,克拉克为了让更多的人 ...

  3. 网关 192.168.2.1 114.114.114.114 dns查询

    在浏览器输入域名 分析抓包数据 分析 ip 192.168.3.123 网关192.168.2.1

  4. 【CSU 1079】树上的查询

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1079 现有一棵有N个顶点的树,顶点的标号分别为1, 2, …, N.对于每个形如a b k的询问, ...

  5. Unity3D游戏,TCP,WEBCOSKT,HTTP通信架构 weaving-socket

    weaving-socket 详细介绍 项目简介 2017-8-8:新发布功能 增加U3D游戏客户的通讯项目支持,并提供示例内容. 2017-5-5: 新发布 weaving-socket 架构的.n ...

  6. 【POJ 2983】 Is the information reliable?

    [题目链接] 点击打开链接 [算法] 差分约束系统,SPFA判负环 [代码] #include <algorithm> #include <bitset> #include & ...

  7. 关于Dubbo中一些小众但很实用的功能

    dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能: 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...

  8. 每天一个 linux命令(35):ln 命令(转载)

    转载:http://www.cnblogs.com/peida/archive/2012/12/11/2812294.html ln是linux中又一个非常重要命令,它的功能是为 某一个文件在另外一个 ...

  9. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜【贪心||最大流(?)】

    洛谷上能过的最大流bzoj上T了--但是贪心做法明明在洛谷上比最大流要慢啊--如果是最大流的话就是裸题了吧 说一下贪心,就按照防晒霜排序,然后对每一个防晒霜选一头可以使用的且r最小的牛 就,没了. 贪 ...

  10. [C陷阱和缺陷] 第7章 可移植性缺陷

      C语言在许多不同的系统平台上都有实现.的确,使用C语言编写程序的一个首要原因就是,C程序能够方便地在不同的编程环境中移植.   不同的系统有不同的需求,因此我们应该能够预料到,机器不同则其上的C语 ...