vector向量容器元素排序與查找


1.利用標准庫函數sort()對vector進行排序

參考源碼:

#include <algorithm> #include <vector> vector<int> vec; //比較函數,這里的元素類型要與vector存儲的類型一致 bool compare(int a,int b) { return a<b; //升序排列 } std::sort(vec.begin(),vec.end(),compare); 

 

注意: 
sort()函數原型申明如下:

template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last); template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

若不自定義比較函數,默認是按照升序排序。

2.利用標准庫函數find()對vector進行查找

vector向量容器沒有提供根據元素查找的成員,可使用find函數來完成。 
參考源碼:

vector<int> vec; int a=10; vector<int>::iterator it=find(vec.begin(),vector.end(),a);

 

find()原型:

template <class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val);
  • 1
  • 2

3.構造類型在vector中的排序與查找

將構造類型,比如struct的對象存儲在vector中,查找時,需要重載等於運算符(operator==),具體實現參考如下代碼。

struct Element{ public: int a; int b; Element(int a,int b){ this->a=a; this->b=b; }; bool operator==(const Element& ele){ return a==ele.a&&b==ele.b; }; }; //自定義比較函數 bool compare(const Element& left,const Element& right){ return left.a<right.a; //升序排列 } //重載輸出操作符<<,格式化輸出Element ostream& operator<<(ostream& coutU,const Element& ele){ coutU<<"a:"<<ele.a<<",b:"<<ele.b; return coutU; } int main(){ vector<Element> vecEle; vecEle.push_back(Element(4,4)); vecEle.push_back(Element(1,1)); vecEle.push_back(Element(2,2)); vecEle.push_back(Element(3,3)); //sort std::sort(vecEle.begin(),vecEle.end(),compare); for(int i=0;i<vecEle.size();++i){ cout<<vecEle[i]<<endl; } //查找Element(4,4) vector<Element>::iterator it=find(vecEle.begin(),vecEle.end(),Element(4,4)); cout<<"found "<<*it<<endl; }

程序輸出: 
a:1,b:1 
a:2,b:2 
a:3,b:3 
a:4,b:4 
found a:4,b:4


參考文獻

[1]C++ reference std::sort
[2]C++ reference std::find.


免責聲明!

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



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