zoukankan      html  css  js  c++  java
  • C++标准库 vector排序

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

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



  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/xzh1993/p/6202037.html
Copyright © 2011-2022 走看看