在find_if

时间:2018-04-05 16:40:32

标签: c++ templates iterator maps functor

我想知道如何使用模板函子作为find_if的参数。我不确定语法。

例如,假设一个从多图形产品中删除产品的仿函数。要做到这一点,我必须扫描"多图,找到产品(使用我的平等仿函数)并删除它。

在这里,我的平等'算符:

class isEqual
{
public:
    isEqual(T* t) : t_(t) {}

    bool operator()(const pair<int, T*> pair) const
    {
        return (pair.second == t_);
    }

private:
    T* t_;
};

以及这里的操纵者&#34;擦除产品&#34;在哪里我必须使用我的&#39;是平等的#39;产品:

class EraseProduct
public:
    EraseProduct(multimap <int, Produit*>& multimap) : multimap_(multimap) {} ; // constructor that initializes 'multimap_' attribute

    multimap <int, Product*>& operator()(Product* product)
    {
         auto it = find_if(multimap_.begin(), multimap_.end(), USE_EQUAL_FUNCTOR_HERE)

         if (it != multimap_.end)
         multimap_.erase(it)

         return multimap_;

    }
private:
    multimap<int, Product*>& multimap_;

产品是一个类。所以我的问题是我写的地方&#34; USE_EQUAL_FUNCTOR_HERE&#34;。我无法弄清楚正确的语法。我试过了:

IsEqual(), IsEqual(product)

和其他一些东西。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 首先,您必须使isEqual成为一个类模板。如发布,它不是。
  2. 然后,您将使用Product作为模板参数来创建实例并将其用作find_if的参数。
  3. template <typename T>
    class isEqual
    {
       ...
    };
    

    auto it = find_if(multimap_.begin(), multimap_.end(), isEqual<Product>());