zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    常见RGB透明度对照表在这
    Android节假日图标动态替换方案
    用两个栈实现队列
    从头到尾打印链表 (链表/栈)
    MySQL常用函数
    找出数组中重复的数字
    两数之和
    java的list的几种排序写法整理(sort的用法)
    Java知识目录
    通过关键词来推荐话题
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8678242.html
Copyright © 2011-2022 走看看