【问题标题】:Using a functor in find_if [closed]在 find_if 中使用仿函数 [关闭]
【发布时间】:2018-09-15 13:50:28
【问题描述】:

我想知道如何使用模板函子作为 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_;
};

这是一个叫做“擦除乘积”的函子,我必须使用我的“相等”乘积:

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

Product 是一个类。所以我的问题是关于我写“USE_EQUAL_FUNCTOR_HERE”的地方。我无法弄清楚正确的语法。我试过了:

IsEqual(), IsEqual(product)

还有一些其他的东西。

提前致谢!

【问题讨论】:

  • IsEqual(product) 没用?错误是什么?
  • 你从哪里得到Tpair&lt;int, T*&gt;
  • 你可能忘记了template &lt;class T&gt; class isEqual{....
  • 投票结束,因为 cmets 正在猜测丢失的代码并猜测丢失的错误消息。
  • code compiling,你应该读一本关于 C++ 的好书。

标签: c++ templates iterator maps functor


【解决方案1】:
  1. 首先您必须将isEqual 设为类模板。正如发布的那样,它不是。
  2. 然后,您将使用Product 作为模板参数来创建一个实例并将其用作find_if 的参数。

template <typename T>
class isEqual
{
   ...
};

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多