我一直在摆弄lambda表达式,以了解它们是如何工作的,但遇到了一个问题。我一直试图弄清楚我做错了什么但似乎无法做到。编译器只是拒绝接受这个简单的例子:
int a = 2;
std::vector<int> vv(10);
vv[2]=2;
std::count( vv.begin(), vv.end(), [&a](int z) { return a == z; } );
我收到错误
Error 1 error C2678: binary '==' : no operator found
which takes a left-hand operand of type 'int' (or there is no
acceptable conversion) e:\program files (x86)\microsoft visual studio
11.0\vc\include\xutility 3243
我做错了什么?
答案 0 :(得分:4)
算法需要知道谓词是基于使用相等还是一元谓词来比较值。为了区分这两者,_if
后缀用于各种算法:find_if()
,`copy_if()
,count_if()
等。lambda没问题,但它不具有可比性到序列的value_type
。使用谓词时需要使用std::count_if()
:
std::count_if( vv.begin(), vv.end(), [&a](int z) { return a == z; } );
...或值:
std::count( vv.begin(), vv.end(), a);