STL之使用vector排序

简介: 应用场景:   在内存中维持一个有序的vector: 1 // VectorSort.cpp : Defines the entry point for the console application.

应用场景:

  在内存中维持一个有序的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<<'\t'<<(*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)

 

相关文章
|
5月前
|
存储 安全 算法
C++的内置数组和STL array、STL vector
C++的内置数组和STL array、STL vector
|
6月前
|
存储 C++ 索引
C++:STL - vector
C++:STL - vector
69 1
|
6月前
|
算法 Java 容器
STL_vector
STL_vector
47 0
|
存储 C++ 容器
【C++】STL之vector操作
【C++】STL之vector操作
|
存储 算法 编译器
【剖析STL】vector
vector的介绍及使用 1.1 vector的介绍 cplusplus.com/reference/vector/vector/ vector是表示可变大小数组的序列容器。
40 0
|
存储 Linux C++
C++【STL】之vector的使用
C++ STL vector类常用接口详细讲解,干货满满!
115 0
C++【STL】之vector的使用
|
算法 C++ 容器
STL之vector
STL之vector
|
存储 C++ 容器
【C++】-- STL之vector详解(一)
【C++】-- STL之vector详解
138 0
【C++】-- STL之vector详解(一)
|
Linux 编译器 C++
【C++】-- STL之vector详解(二)
【C++】-- STL之vector详解
150 0
【C++】-- STL之vector详解(二)