zoukankan      html  css  js  c++  java
  • STL之使用vector排序

    应用场景:

      在内存中维持一个有序的vector:

     1 // VectorSort.cpp : Defines the entry point for the console application.
     2 
     3 #include <iostream>
     4 #include <vector>
     5 #include <algorithm>
     6 
     7 //先自定义一个结构体
     8 struct Test {
     9     float member1;
    10     std::string member2;
    11 
    12 };
    13 bool SortByM1( const Test* v1, const Test* v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致
    14 {
    15     return v1->member1 > v2->member1;       //降序排列
    16     //return v1->member1 > v2->member1;     //升序排列
    17 }
    18 void PrintVector( std::vector<Test*> & vec)
    19 {
    20     /*
    21         插一句,
    22         vec.begin()对应的位置是向量的第一个位置,
    23         vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置)
    24         文档上的定义:Returns an iterator referring to the past-the-end element in the vector container.
    25     */
    26     for(std::vector<Test*>::iterator it = vec.begin() ; it != vec.end() ; it++ )
    27     {
    28         std::cout<<(*it)->member1<<'	'<<(*it)->member2<<std::endl;
    29     }
    30 }
    31 
    32 int main(int argc, char* argv[])
    33 {
    34     std::vector<Test*> vecTest;
    35     std::string stt;
    36     for(int i=0; i<10;++i){
    37         stt = "sh" + stt;
    38         Test* tmp = new Test();
    39         tmp->member1 = i;
    40         tmp->member2 = stt;
    41         vecTest.push_back(tmp);
    42     }
    43 
    44     //排序之前
    45     std::cout<<"Before Sort:"<<std::endl;
    46     PrintVector(vecTest);
    47 
    48     std::cout<<"对向量中的所有元素按member1进行升序排列:"<<std::endl;
    49     std::sort(vecTest.begin(),vecTest.end(), SortByM1);
    50     PrintVector(vecTest);
    51 
    52     //std::cout<<"对向量中的第2个到第5个元素按member1进行升序排列:"<<std::endl;
    53     //std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5为第6个位置
    54     //PrintVector(vecTest);
    55 
    56     for(std::vector<Test*>::iterator it = vecTest.begin();
    57         it != vecTest.end(); ++it){
    58         delete *it;          #free掉内存
    59     }
    60 
    61     return 0;
    62 }
    63 
    64 root@u18:~/cp/test# g++ vector_sort.cpp  -g -Wall
    65 root@u18:~/cp/test# ./a.out
    66 Before Sort:
    67 0    sh
    68 1    shsh
    69 2    shshsh
    70 3    shshshsh
    71 4    shshshshsh
    72 5    shshshshshsh
    73 6    shshshshshshsh
    74 7    shshshshshshshsh
    75 8    shshshshshshshshsh
    76 9    shshshshshshshshshsh
    77 对向量中的所有元素按member1进行升序排列:
    78 9    shshshshshshshshshsh
    79 8    shshshshshshshshsh
    80 7    shshshshshshshsh
    81 6    shshshshshshsh
    82 5    shshshshshsh
    83 4    shshshshsh
    84 3    shshshsh
    85 2    shshsh
    86 1    shsh
    87 0    sh    

    root@u18:~/cp/test# valgrind --tool=memcheck --leak-check=yes ./a.out
    ==24247== Memcheck, a memory error detector
    ==24247== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
    ==24247== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
    ==24247== Command: ./a.out
    ==24247==
    Before Sort:
    0 sh
    1 shsh
    2 shshsh
    3 shshshsh
    4 shshshshsh
    5 shshshshshsh
    6 shshshshshshsh
    7 shshshshshshshsh
    8 shshshshshshshshsh
    9 shshshshshshshshshsh
    对向量中的所有元素按member1进行升序排列:
    9 shshshshshshshshshsh
    8 shshshshshshshshsh
    7 shshshshshshshsh
    6 shshshshshshsh
    5 shshshshshsh
    4 shshshshsh
    3 shshshsh
    2 shshsh
    1 shsh
    0 sh
    ==24247==
    ==24247== HEAP SUMMARY:
    ==24247== in use at exit: 0 bytes in 0 blocks
    ==24247== total heap usage: 25 allocs, 25 frees, 768 bytes allocated
    ==24247==
    ==24247== All heap blocks were freed -- no leaks are possible
    ==24247==
    ==24247== For counts of detected and suppressed errors, rerun with: -v
    ==24247== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

  • 相关阅读:
    mongodb 的主从配置
    python 操作mongoDB数据库
    git常用操作
    基于canvas与原生JS的H5动画引擎
    mongodb的使用(入门)
    mongodb 的安装(Centor OS )
    NIO概述及实例(时钟服务器)
    netty上手
    BootStrap概述
    Spark SQL访问PostgreSQL
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4631104.html
Copyright © 2011-2022 走看看