【发布时间】:2023-03-27 18:18:02
【问题描述】:
我想知道标准库中是否有任何工具可以同时计算两个排序范围之间的集合交集和集合差。带有如下签名的东西:
template <class Input1, class Input2,
class Output1, class Output2, class Output3>
Output3 decompose_sets (Input1 first1, Input1 last1,
Input2 first2, Input2 last2,
Output1 result1, Output2 result2,
Output3 result3 );
这样在调用decompose sets后,result1包含[first1,last1)中不在[first2,last2)中的所有元素,result2包含[first2,last2)中所有不在[first1,last1)中的元素, 而result3 包含[first1,last1) 和[first2,last2) 中常见的所有元素。
来自 cplusplus.com 的 set_difference 和 set_intersection 的示例实现似乎可以帮助我创建一个只执行一次扫描而不是三个扫描的高效实现。但是,如果它在标准库中,我不想重新发明轮子。
示例,根据要求:
给定两个集合 a={0, 1, 2, 3, 4} 和 b={2, 4, 5, 6} 那么我想构建以下三个集合:
- only_a = {0,1,3}
- only_b = {5,6}
- 常见 = {2,4}
【问题讨论】:
-
[first1,last2)怎么来的? -
您能否举例说明您想要达到的目标,例如集合 {0, 1, 2, 3} 和 {0, 2, 4, 6} ?
-
@GrzegorzWilanowski 在问题中添加了示例
-
请注意,结果应该是
std::tuple<Output1, Ouput2, Output3>,否则您可以只为Output1和Output2使用inserter 迭代器