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
