我想遍历一个向量,并希望获得另一个向量中更大元素的计数。我在下面的代码段中尝试过,很遗憾,这种方式无法正常工作。
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); });
}
如果要计算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<>());