c++ - 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); });
}
解决方案
如果你想计算有多少元素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<>());
推荐阅读
- python-3.x - 如何避免我的傅立叶级数的 RuntimeWarning
- api - 尝试将用户添加到特定项目时遇到错误 [用户权利 - 更新用户权利 API]
- python - 无法从 scikit learn 导入名称“balanced_accuracy_score”
- excel - 根据vba中行中另一列中的条件传输数据
- bixby - 如何在我的 bixby 胶囊代码中读取配置文件
- javascript - 在javascript中组合8个高位和8个低位
- excel - 如何在过滤列上找到第一个未使用的单元格
- latex - tikzpicture 中的饼图显示颜色的名称
- java - 将组动态设置为 Spring Validator
- c# - 将自定义数字格式模式设置为 fr-CA 而不指定文化