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);

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.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值