【发布时间】:2020-06-05 15:33:39
【问题描述】:
std::vector<int> items = {1, 2, 3, 4, 5};
std::vector<int> removeItems = {2, 4};
我需要删除items 中removeItems 中的值,同时保留items 的顺序。像这样的:
items.remove(removeItems);
输出
项目 = {1, 3, 5}
是否有任何内置的向量方法可以实现这一点?我还没有找到任何接受另一个要删除的项目向量。如果没有,实现这一目标的最有效方法是什么?
编辑
Erasing elements from a vector 这篇文章是指一次删除一个项目,我希望以更紧凑的方式一次删除一大堆
for(num in removeItems) {
items.erase(std::remove(items.begin(), items.end(), num), items.end())
}
因为这种删除项目的方式肯定是非常低效的,因为对于removeItems 中的每个项目,您必须检查整个items 向量两次(removeItems.size())
编辑 2
items 或 removeItems 中的元素数将在 0-10000 范围内
【问题讨论】:
-
stackoverflow.com/a/347478/783510 我想你正在寻找所谓的“删除/擦除”成语
-
@PhilippClaßen 否,因为他们一次删除单个成员。我希望一次完成所有工作
-
“我希望以一种更紧凑的方式一次删除一大堆”它只是组合......把它放在一个函数中!!