前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的數組,是的,數組,所以打算按照對數組進行排序的方法:用快速排序或是冒泡排序等算法自己寫一個排序的函數。后來覺得STL這么強大,應該有它自己的排序方法(沒有好好學習啊),然后就去google了一下,果然有,而且可以自定義排序的函數,太強大了(而且效率應該比我自己寫的要好吧)。
- // 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;
- }