【发布时间】:2011-08-30 13:14:47
【问题描述】:
s1 和 s2 是集合(Python 集合或 C++ std::set)
要将 s2 的元素添加到 s1(设置联合),您可以这样做
Python: s1.update(s2)
C++: s1.insert(s2.begin(), s2.end());
要从 s1 中删除 s2 的元素(设置差异),您可以这样做
Python: s1.difference_update(s2)
什么是 C++ 等价物?代码
s1.erase(s2.begin(), s2.end());
不起作用,因为 s1.erase() 需要来自 s1 的迭代器。代码
std::set<T> s3;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::inserter(s3, s3.end());
s1.swap(s3);
有效,但似乎过于复杂,至少与 Python 相比。
有没有更简单的方法?
【问题讨论】:
-
+1 好问题!我很确定这可以使用
std::for_each来完成,但仍然不确定具体如何。 -
嗯,看来
for_each在这里无济于事.. 甚至 BOOST_FOREACH :\\ -
你可以做 BOOST_FOREACH(const T& t, s2) s1.erase(t);
-
噢!当然你可以使用它,因为你只需要值,而不是迭代器..