C++標准庫 vector排序


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

 

[cpp]  view plain  copy
 
 print?
  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. }  



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM