做C++;无序的_集有内置的布尔运算吗?(相交、并、差) 我已经搜索过了,但是我找不到一种内置的方法来在C++中的无序的集合之间执行布尔运算。我读过关于集合交的书,但这只适用于有序集合

做C++;无序的_集有内置的布尔运算吗?(相交、并、差) 我已经搜索过了,但是我找不到一种内置的方法来在C++中的无序的集合之间执行布尔运算。我读过关于集合交的书,但这只适用于有序集合,c++,c++11,boost,unordered-set,C++,C++11,Boost,Unordered Set,这在Python之类的软件中非常简单: a = set([1, 2, 3, 4]) b = set([2, 4]) >>> a.difference(b) set([1, 3]) >>> a.intersection(b) set([2, 4]) >>> a.union(b) set([1, 2, 3, 4]) 我很难相信,在C++11和boost之间,如果不编写自己的函数,就没有一种干净的方法可以做到这一点 我错过什么了

这在Python之类的软件中非常简单:

a = set([1, 2, 3, 4])
b = set([2, 4])
>>> a.difference(b)
   set([1, 3])
>>> a.intersection(b)
   set([2, 4])
>>> a.union(b)
   set([1, 2, 3, 4])
我很难相信,在C++11和boost之间,如果不编写自己的函数,就没有一种干净的方法可以做到这一点

我错过什么了吗?这样的东西不存在有什么原因吗

编辑:我读过,但它只描述了一种编写自己的相交/差分/并集函数的方法。我正在寻找stl或boost中内置的东西

编辑:这样描述可能更容易

std::unordered_set<int> whole({1, 2, 3, 4});
std::unordered_set<int> even({2, 4});

// Why doesn't something like the following exist?
std::unordered_set<int> odd = whole.difference(even);
// Result would contain {1, 3}.
std::无序集整({1,2,3,4});
无序集偶({2,4});
//为什么不存在像下面这样的东西?
无序集奇数=整差(偶数);
//结果将包含{1,3}。

这是我希望经常使用的东西,以至于我很难相信它不是内置的(或者至少是在boost中)。

为什么不能使用
std::set
(有序集)?在集合的元素上有哪些可用的操作?在没有排序的情况下,集合运算至少具有线性时间复杂度。请注意,
std::set
通常比
std::unordered\u set
更可取(因此您需要对元素提供一些顺序)@basileStryneVitch集差和交集无论如何都是线性时间。@basileStryneVitch为什么对我的集的元素有什么操作是重要的,只要它们是可散列的?如果您关心顺序或内存,我会说std::set更可取,但在我的情况下,我看重的是访问速度而不是内存,而且顺序对我来说并不重要,因此std::unordered_set是最佳选择。为什么您不能使用
std::set
(有序集)?在集合的元素上有哪些可用的操作?在没有排序的情况下,集合运算至少具有线性时间复杂度。请注意,
std::set
通常比
std::unordered\u set
更可取(因此您需要对元素提供一些顺序)@basileStryneVitch集差和交集无论如何都是线性时间。@basileStryneVitch为什么对我的集的元素有什么操作是重要的,只要它们是可散列的?如果您关心顺序或内存,我会说std::set更可取,但在我的例子中,我看重的是访问速度而不是内存,并且顺序对我来说并不重要,因此std::unordered_set是最好的选择。