• vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法


    之前博客讲了一些关于std::find和std::find_ if的一些用法,但是没有讲述对于vector中存储的是自定义的类,那么怎么样使用std::find和std::find_if进行查找呢?

    先定义一个类:

    class Item
    {
    private:
        std::string  m_ItemId;
        int m_Price;
        int m_Count;
    public:
        Item(std::string id, int price, int count):
            m_ItemId(id), m_Count(count), m_Price(price){}
        int getCount() const {
            return m_Count;
        }
        std::string getItemId() const {
            return m_ItemId;
        }
        int getPrice() const {
            return m_Price;
        }
        bool operator==(const Item & obj2) const
        {
            if(this->getItemId().compare(obj2.getItemId()) == 0)
                return true;
            else
                return false;
        }
    };
    std::vector<Item> getItemList()
    {
        std::vector<Item> vecOfItems ;
        vecOfItems.push_back(Item("D121",100,2));
        vecOfItems.push_back(Item("D122",12,5));
        vecOfItems.push_back(Item("D123",28,6));
        vecOfItems.push_back(Item("D124",8,10));
        vecOfItems.push_back(Item("D125",99,3));
        return vecOfItems;
    }
    

      接下来就是使用std::find算法了:

    int main()
    {
        std::vector<Item> vecOfItems = getItemList();
        std::vector<Item>::iterator it;
        it = std::find(vecOfItems.begin(), vecOfItems.end(), Item("D123", 99, 0));
        if (it != vecOfItems.end())
            std::cout << "Found with Price ::" << it->getPrice() << " Count :: " << it->getCount() << std::endl;
        else
            std::cout << "Item with ID :: D126 not Found" << std::endl;
        return 0;
    }
    
    //输出:
    Found with Price ::28 Count :: 6
    

      但是如果不能使用==的情况下,我们就可以使用find_if解决问题了:
    增加函数:

    bool priceComparision(Item & obj, int y)
    {
        if(obj.getPrice() == y)
            return true;
        else
            return false;
    }
    

      就是这样:

    #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<functional>
    using namespace std;
    class Item
    {
    private:
        std::string  m_ItemId;
        int m_Price;
        int m_Count;
    public:
        Item(std::string id, int price, int count) :
            m_ItemId(id), m_Count(count), m_Price(price) {}
        int getCount() const {
            return m_Count;
        }
        std::string getItemId() const {
            return m_ItemId;
        }
        int getPrice() const {
            return m_Price;
        }
        bool operator==(const Item & obj2) const
        {
            if (this->getItemId().compare(obj2.getItemId()) == 0)
                return true;
            else
                return false;
        }
    };
    
    bool priceComparision(Item & obj, int y)
    {
        if (obj.getPrice() == y)
            return true;
        else
            return false;
    }
    
    std::vector<Item> getItemList()
    {
        std::vector<Item> vecOfItems;
        vecOfItems.push_back(Item("D121", 100, 2));
        vecOfItems.push_back(Item("D122", 12, 5));
        vecOfItems.push_back(Item("D123", 28, 6));
        vecOfItems.push_back(Item("D124", 8, 10));
        vecOfItems.push_back(Item("D125", 99, 3));
        return vecOfItems;
    }
    
    int main()
    {
        std::vector<Item> vecOfItems = getItemList();
        std::vector<Item>::iterator it;
        it = std::find_if(vecOfItems.begin(), vecOfItems.end(), std::bind(priceComparision, std::placeholders::_1, 28));
        if (it != vecOfItems.end())
            std::cout << "Item Price ::" << it->getPrice() << " Count :: " << it->getCount() << std::endl;
        else
            std::cout << "Item not Found" << std::endl;
        return 0;
    }
    

      最后还可以使用lambda表达式:

    std::vector<Item> vecOfItems = getItemList();
    std::vector<Item>::iterator it;
    it = std::find_if(vecOfItems.begin(), vecOfItems.end(), [](Item const& obj){
            return obj.getPrice() == 28;
        } );
    if(it != vecOfItems.end())
        std::cout<<"Item Price ::"<<it->getPrice()<<" Count :: "<<it->getCount()<<std::endl;
    else
        std::cout<<"Item not Found"<<std::endl;
    

      

  • 相关阅读:
    【HEVC帧间预测论文】P1.8 Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices
    【HEVC帧间预测论文】P1.7 Content Based Hierarchical Fast Coding Unit Decision Algorithm
    【HEVC帧间预测论文】P1.6 A Fast HEVC Inter CU Selection Method Based on Pyramid Motion Divergence
    【HEVC帧间预测论文】P1.5 Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule
    【HEVC帧间预测论文】P1.4 Motion Vectors Merging: Low Complexity Prediction Unit Decision
    【HEVC帧间预测论文】P1.3 Fast Inter-Frame Prediction Algorithm of HEVC Based on Graphic Information
    【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin
    【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法
    【HEVC简介】DB-DeBlock Filter
    【HEVC简介】ALF-Adative Loop Filter
  • 原文地址:https://www.cnblogs.com/noticeable/p/14862169.html
Copyright © 2020-2023  润新知