首页 > 解决方案 > count_if 中外部值的比较

问题描述

我想遍历一个向量并想获得另一个向量中更大元素的计数。我尝试了下面的代码片段,不幸的是它不能以这种方式工作。

sort(begin(vec1),end(vec1));
sort(begin(vec2),end(vec2));

for(int i = 0; i < vec1.size(); i++)
{
    int val = vec1[i];
    count_if(begin(vec2),end(vec2),[](int x) { return (x > val); });
}

标签: c++stl

解决方案


如果你想计算有多少元素vec2大于i'th元素,vec1那么你做对了,只需要val在 lambda中捕获

for(int i = 0; i < vec1.size(); i++)
{
    int val = vec1[i];
    auto res = count_if(begin(vec2),end(vec2), [val](int x) { return (x > val); });
}

但是如果你想将每个元素vec2与相应的元素进行比较,vec1你必须手动进行。

int count = 0;
//here the sizes of vec1 and vec2 must be equal
for (auto it1 = begin(vec1), it2 = begin(vec2); it1 != end(vec1); ++it1, ++it2) {
    if (*it2 > *it1)
        ++count;
}

编辑:正如@Jarod42 评论的那样。可以对第二种情况使用算法

auto res = std::transform_reduce(begin(vec2), end(vec2), begin(vec1), 0,
    std::plus<>(), std::greater<>());

推荐阅读