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