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

Is it possible to remove certain elements from a vector based on the information from another vector?

本文关键字:向量 一个 删除 元素 另一个 是否 信息      更新时间:2023-10-16

假设我们有向量A和B包含的对象不是基元数据。

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

我怀疑在Java中,这可以通过方法调用来完成to remove所有传递要删除的内容列表的位置作为参数删除。

这在C++语言中可能吗?

谢谢!

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

在不知道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());

这将在B中搜索与A中匹配的任何内容。如果发现什么东西,它将被移除。

这个过程可以分解为:

1) 选择符合要删除元素条件的比较方法,

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

为什么这会成为一个问题?你只需要找到一种方法来比较向量B上的元素和向量a上的元素,并在此基础上,构建一个要删除的元素列表,然后删除它们。

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