gpt4 book ai didi

c++ - 删除两个集合交集中元素的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:11 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C++03 应用程序,其中有两个标准容器。我想从一个容器中删除另一个容器中存在的所有项目(集合的交集)。

像这样:

std::vector< int > items = /* 1, 2, 3, 4, 5, 6, 7 */;
std::set< int > items_to_remove = /* 2, 4, 5*/;

std::some_algorithm( items.begin, items.end(), items_to_remove.begin(), items_to_remove.end() );

assert( items == /* 1, 3, 6, 7 */ )

是否存在可以执行此操作的现有算法或模式,或者我是否需要自己动手?

谢谢

最佳答案

尝试:

items.erase(
std::remove_if(
items.begin(), items.end()
, std::bind1st(
std::mem_fun( &std::set< int >::count )
, items_to_remove
)
)
, items.end()
);

std::remove(_if) 实际上并没有删除任何东西,因为它适用于迭代器而不是容器。它所做的是在范围末尾对要删除的元素重新排序,并返回一个迭代器到容器的新末尾。然后,您调用 erase 以实际从容器中删除新结束之后的所有元素。

更新:如果我没记错的话,绑定(bind)到标准库组件的成员函数不是标准的 C++,因为允许实现向函数添加默认参数。通过创建自己的函数或函数对象谓词来检查该元素是否包含在要删除的项目集中,您会更安全。

关于c++ - 删除两个集合交集中元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com