是否有可能根据另一个向量中的信息从向量中删除某些元素?

时间:2013-11-29 15:50:02

标签: c++ vector containers

让我们说我们有向量A和B 包含对象而非原始数据。

B向量将包含有关哪些元素的信息 从矢量A中删除。如果可能的话,我不想依赖索引。

我怀疑在Java中可以通过方法调用来完成 删除所有传递事物列表的地方 删除作为参数。

这可能是用C ++语言实现的吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

如果对矢量进行了排序,则可以使用std::set_difference。事实上,你不首先对它们进行排序,在复杂性方面你不能比n ^ 2好。所以我的建议是:对矢量进行排序并使用set_difference。

答案 1 :(得分:3)

在不知道AB包含的具体内容的情况下,可以执行以下操作:

std::vector<int> A;
std::vector<int> B;
// fill in your vectors
A.erase(std::remove_if(A.begin(), A.end(), [&](int i)
{
    return std::find(B.begin(), B.end(), i) != B.end();
}), A.end());

这会搜索BA匹配的所有内容。如果找到了某些内容,它将被删除。

答案 2 :(得分:2)

此过程可以分解为:

1)选择限定要删除的元素的比较方法

2)找到一种删除所选元素的方法(作为连续范围或逐个删除)。

为什么这应该是一个问题呢?您只需要找到一种方法来将矢量B上的元素与矢量A上的元素进行比较,并在此基础上构建要删除的元素列表,然后将其删除。

当然,你的向量可以是某个类的向量,它包含在A和B中对象之间进行比较所需的所有属性。