count_if中外部值的比较

问题描述 投票:0回答:1

我想遍历一个向量,并希望获得另一个向量中更大元素的计数。我在下面的代码段中尝试过,很遗憾,这种方式无法正常工作。

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
1个回答
0
投票

如果要计算vec2中的元素数大于i'th中的vec1元素,那么您做得正确,只需要在lambda中捕获val

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<>());
© www.soinside.com 2019 - 2024. All rights reserved.