在集合上使用lambda表达式和find_if

时间:2012-05-23 09:52:25

标签: c++ stl lambda

我有一个容器对象:

R Container;

R的类型为list<T*>vector<T*>

我正在尝试编写以下函数:

template<typename T, typename R>
T& tContainer_t<T, R>::Find( T const item ) const
{   
typename R::const_iterator it = std::find_if(Container.begin(), Container.end(),  [item](const R&v) { return item == v; });
if (it != Container.end())
    return (**it);
else
    throw Exception("Item not found in container");
}

尝试方法时(v是我班级的一个对象)

double f = 1.1;
v.Find(f);

我得到binary '==' : no operator found which takes a left-hand operand of type 'const double' (or there is no acceptable conversion)

我对lambda表达式语法感到困惑,我应该在那里写什么,找不到任何友好的解释。

有什么问题? 10倍。

1 个答案:

答案 0 :(得分:6)

缺少一些上下文,但我注意到:

  • 您返回**it,因此您可能想要比较*v==itemt
  • 您将我怀疑您const R&v的{​​{1}}传递到lambda
  • 您使用了const_iterator,但返回了非const引用。这是一个不匹配
  • 我做了一些params const&amp;为提高效率(并支持不可复制/不可移动的类型)

这是工作代码,删除了缺少的类引用:

const T&v