Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在find_if中使用函子_C++_Templates_Iterator_Maps_Functor - Fatal编程技术网

C++ 在find_if中使用函子

C++ 在find_if中使用函子,c++,templates,iterator,maps,functor,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 ==

我想知道如何使用模板函子作为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_;
};
还有其他一些东西

提前谢谢

首先,您必须使isEqual成为一个类模板。正如贴出的,它不是。 然后,您将使用Product作为模板参数来创建实例,并将其作为参数来查找_if。 及


IsEqualproduct不起作用?错误是什么?你从哪里得到C++中的T?你可能忘记了模板类IsIsA{{投票关闭,因为注释是猜测丢失的代码,猜测丢失的错误信息。你应该读一本关于C++的好书。
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_;
IsEqual(), IsEqual(product)
template <typename T>
class isEqual
{
   ...
};
auto it = find_if(multimap_.begin(), multimap_.end(), isEqual<Product>());