std::set_intersection
获取元素的排序范围(以及迭代器对)。但是假设我有未分类的数据,例如两个std::unordered_set
。有交叉的标准设施吗?
答案 0 :(得分:2)
我不知道C ++ 11中有任何这样的功能。答案是“不”。
答案 1 :(得分:1)
在这种情况下没有捷径。您应该检查较小集合中的每个元素是否为较大集合中的成员资格,并将其插入到输出集中(如果已找到)。由于unordered_set是使用带桶的散列实现的,因此查找时间应该(具有合适的散列函数和合理的散列最大加载)很小。您应该能够在较小的集合上编写对for_each的调用,该集合对较大的集合执行检查,并且插入到输出集合中而不会变得太难看。
如果要在两个原始集之一中构建交集,可以检查其每个元素是否在另一个集合中,如果不是,则删除该元素。这可以使用remove_if写入将保存结果的unordered_set。
另一种选择是将copy_if与插入迭代器一起使用。在相同的时间和空间内有很多选择。选择一个似乎为了清晰度而优化的方法。
我知道没有罐头库功能可以为你做。