让我们说我们有向量A和B 包含对象而非原始数据。
B向量将包含有关哪些元素的信息 从矢量A中删除。如果可能的话,我不想依赖索引。
我怀疑在Java中可以通过方法调用来完成 删除所有传递事物列表的地方 删除作为参数。
这可能是用C ++语言实现的吗?
谢谢!
答案 0 :(得分:5)
如果对矢量进行了排序,则可以使用std::set_difference
。事实上,你不首先对它们进行排序,在复杂性方面你不能比n ^ 2好。所以我的建议是:对矢量进行排序并使用set_difference。
答案 1 :(得分:3)
在不知道A
和B
包含的具体内容的情况下,可以执行以下操作:
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
匹配的所有内容。如果找到了某些内容,它将被删除。
答案 2 :(得分:2)
此过程可以分解为:
1)选择限定要删除的元素的比较方法
2)找到一种删除所选元素的方法(作为连续范围或逐个删除)。
为什么这应该是一个问题呢?您只需要找到一种方法来将矢量B上的元素与矢量A上的元素进行比较,并在此基础上构建要删除的元素列表,然后将其删除。
当然,你的向量可以是某个类的向量,它包含在A和B中对象之间进行比较所需的所有属性。