std::set_intersection
接受元素的排序范围(井,迭代器对)。但是,假设我有未排序的数据,例如2 std::unordered_set
。有交叉路口的标准设施吗?
在这种情况下,没有捷径可走。您应该检查较小集合中的每个元素是否具有较大集合中的成员资格,如果找到,则将其插入到输出集合中。由于unordered_set是使用带有桶的哈希表实现的,因此查找时间(具有不错的哈希函数和合理的哈希表最大负载)应该很小。您应该能够在较小的集合上编写对for_each的调用,从而对较大的集合进行检查,并将插入插入输出集合,而不会变得太难看。
如果要在两个原始集合之一中就地构建相交,则可以检查其每个元素是否在另一个集合中,如果没有,则删除该元素。可以用remove_if写入将保存结果的unordered_set上。
另一个选择是将copy_if与插入迭代器一起使用。在相同的时间和空间内,有许多选项可以执行此操作。选择一种似乎可以优化以提高清晰度的工具。
我知道没有固定的库函数可以为您完成此任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句