您的位置:首页 > 编程语言 > C语言/C++

C++标准库 std::sort vector排序

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

[cpp] view
plaincopyprint?

// VectorSort.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

//先自定义一个结构体

struct Test {

int member1;

int member2;

};

//自定义排序函数

bool SortByM1( const Test &v1, const Test &v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致

{

return v1.member1 < v2.member1;//升序排列

}

void MyPushback(std::vector<Test> & vecTest, const int &m1, const int &m2)

{

Test test;

test.member1 = m1;

test.member2 = m2;

vecTest.push_back(test);

}

void PrintVector( std::vector<Test> & vec)

{

/*

插一句,

vec.begin()对应的位置是向量的第一个位置,

vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置)

文档上的定义:Returns an iterator referring to the past-the-end element in the vector container.

*/

for(std::vector<Test>::iterator it = vec.begin() ; it != vec.end() ; it++ )

{

std::cout<<it->member1<<'\t'<<it->member2<<std::endl;

}

}

int _tmain(int argc, _TCHAR* argv[])

{

std::vector<Test> vecTest;

MyPushback(vecTest,9,1);

MyPushback(vecTest,8,2);

MyPushback(vecTest,7,3);

MyPushback(vecTest,6,4);

MyPushback(vecTest,5,5);

MyPushback(vecTest,4,6);

MyPushback(vecTest,3,7);

MyPushback(vecTest,2,8);

MyPushback(vecTest,1,9);

//排序之前

std::cout<<"Before Sort:"<<std::endl;

PrintVector(vecTest);

std::cout<<"对向量中的所有元素按member1进行升序排列:"<<std::endl;

std::sort(vecTest.begin(),vecTest.end(),SortByM1);

PrintVector(vecTest);

//std::cout<<"对向量中的第2个到第5个元素按member1进行升序排列:"<<std::endl;

//std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5为第6个位置

//PrintVector(vecTest);

return 0;

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: