使用std :: count计算一对数组中的相等值

时间:2013-06-06 10:44:39

标签: c++ arrays c++11 counter

给出一对等长阵列。 。

void someFunc (const float **inputChannelData)
{
    const float* L = inputChannelData[0];
    const float* R = inputChannelData[1];
    ...

我可以看到使用std::count计算常量值的出现次数非常容易。 。

std::count(L, L+someIntegerOffset, 0.0f)

...但是是否有一个标准算法(或成语)计算两个数组中相同值的元素(每个数组中的相同索引)数量?

Matlab等效项看起来像sum(L==R)

2 个答案:

答案 0 :(得分:4)

std::count的谓词形式为std::count_ifdocumentation表示它通过左值获取参数。

所以我相信我可以将一个捕获两个数组的lambda混合在一起,从& arg获取距离/索引,然后检查两个值。我怀疑我会这样使用它,而不是老式的循环。

答案 1 :(得分:1)

您可以使用zip来查看Sequence-zip function for c++11?

然后使用谓词count_if,该元组只有相同的元素。

此外,您可以简单地创建对的数组并执行相同的操作。

这样的事情可以用于计数。

void someFunc(const float** inputChannelData, size_t offset)
{
   const float* R = inputChannelData[0];
   const float* L = inputChannelData[1];
   std::vector<std::pair<int, int>> pairs;
   std::transform(L, L + offset, R, std::back_inserter(pairs),
   [](float l, float r)
   {
      return std::make_pair(l, r);
   });
   size_t equal_pairs = std::count_if(pairs.begin(), pairs.end(),
   [](const std::pair<float, float>& p)
   {
      return p.first == p.second;
   });
}