根据一个向量内的值从两个向量中移除项目
Remove items from two vectors depending on the values inside one vector
我有两个长度相等的整数向量。假设我想删除第一个向量中的所有NAN项。显然,我使用remove_if算法。假设这会删除索引1,2,5中的元素。然后,我想从这些索引处的第二个向量中删除项目。
最规范的C++方法是什么?
这可以使用Boost来完成,方法是创建一个zip_iterator
,然后并行迭代两个容器中迭代器的tuple
。
首先传递一对zip_iterators
到std::remove_if
,并让谓词检查NaN 的第一个vector
的元素
auto result = std::remove_if(boost::make_zip_iterator(boost::make_tuple(v1.begin(), v2.begin())),
boost::make_zip_iterator(boost::make_tuple(v1.end(), v2.end())),
[](boost::tuple<double, int> const& elem) {
return std::isnan(boost::get<0>(elem));
});
然后使用vector::erase
删除不需要的元素。
v1.erase(boost::get<0>(result.get_iterator_tuple()), v1.end());
v2.erase(boost::get<1>(result.get_iterator_tuple()), v2.end());
现场演示
创建压缩迭代器范围所需的样板可以通过使用boost::combine
和Boost.Range版本的remove_if
来进一步减少。
auto result = boost::remove_if(boost::combine(v1, v2),
[](boost::tuple<double, int> const& elem) {
return std::isnan(boost::get<0>(elem));
});
实时演示
使用vector<pair<int, int>>
将这两个向量连接在一起。然后,根据to的第一个元素执行删除操作,同时删除这两个元素。
相关文章:
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 查找两个排序向量中共有的元素
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 如何根据两个因素组织向量:id 和数量?(C++)
- 在C++中查找两个向量之间最相似的值
- 如何在C++中从两个向量生成所有可能的对?
- 返回两个向量 – 使用引用还是元组?
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 检查两个向量是否并行的最有效方法
- 有没有办法将两个或多个不同的类链接到一个类中(稍后在向量上使用)?
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 如何获得比较两个向量对的子集
- C++将两个不同类型的向量的属性连接到新的向量中
- 如何组合两个整数向量
- 在两个类实例之间共享向量
- 如何在 c++ 中对两个向量进行线性搜索?
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?