从对象的向量中选择
C++ select from a vector of objects
我有一个类a,其成员方法如下:
bool A::test();
我有一个vector<A> v
(a对象)我想创建一个新的vector<A>
从v中,只选择A::test()返回true的元素
使用STL和boost::lambda(1)来实现这一点的最简单和最优雅的方法是什么
虽然copy_if
没有进入早期的标准,但您可以使用remove_copy_if
完成相同的事情。
如果你有c++ 11可用,它非常简单:
std::remove_copy_if(
v.begin(),
v.end(),
std::back_inserter(b),
[] (const A& val) -> bool
{ return val.test(); });
因为你没有c++ 11,仍然很简单:
// global free function
bool test_a(const A& a) { return a.test(); }
std::remove_copy_if(
v.begin(),
v.end(),
std::back_inserter(b),
test_a);
我认为你可以使用remove_copy_if
来做到这一点,比如std::remove_copy_if(v.begin(), v.end(), std::back_inserter(new_v), pred_that_returns_true_when_A::test()_is_false);
你可以这样做
std::vector<A>::iterator testFailedIt = std::stable_partition(v.begin(), v.end(), test());
std::copy(v.begin(), testFailedIt, std::back_inserter(newVector));
如果你不关心元素的相对顺序,std::partition也可以。
std::partition/stable_partition对序列中的元素重新排序,使test()为真的项位于序列的第一部分,其他项位于序列的第二部分。它返回第二个组的第一个位置的迭代器。
反过来呢?复制第一个vector对象并使用remove_if。您只需要反转测试函数的返回值。像这样:
std::vector<A> second_vector(first_vector);
std::erase(std::remove_if(second_vector.begin(), second_vector.end(), test), second_vector.end());
相关文章:
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 选择和修改嵌套向量中的条目的最佳实践
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 从加密项目向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- 如何从字符串向量中选择第 n 个位置?
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- 如果我们从每个 Y 向量中选择一个值,则 X 数字的每个组合都可能
- 将向量<double>设置为wxComboBox的选择值
- 基于C 中布尔值向量中的向量中选择对象
- 有选择地对向量 c++ 进行排序
- C++选择排序(向量)
- 在C 复杂性和实现中选择位向量
- C++数组选择平方数并创建新向量
- 使用STD ::查找从向量中选择项目
- 测试std ::向量内容的选择
- 为什么我的选择排序返回原始向量中不在的值
- 在C++中选择运行时数组或向量
- 如何使用选择语句检索 sqlite 并分配给向量然后分配给字符串
- C++ Sqlite 选择语句并存储为向量
- 持有唯一值集的向量,以便使用 C++ 和 OpenGL 进行颜色选择