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