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<<'\t'<<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 }