• 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. }  



  • 相关阅读:
    常见的块级元素和行级元素
    CentOS 利用 yum 安装卸载软件常用命令
    MySQL 派生表(Derived Table) Merge Optimization
    MySQL中的两种临时表
    集中化管理平台 — Ansible 详解
    MySQL 错误码对照
    mysqldump 工具使用详解——参数选项
    git 命令参考手册
    XtraBackup 备份与恢复实例讲解
    XtraBackup 原理与安装
  • 原文地址:https://www.cnblogs.com/xzh1993/p/6202037.html
Copyright © 2020-2023  润新知