CodeWalk

std::set_union与std::set_intersection等集合算法

作者:我是大山 · 2026-05-30 12:55

STL中提供了哪些集合算法(set operations)?分别解释set_union、set_intersection、set_difference、set_symmetric_difference的语义、前提条件和使用场景。它们和最朴素的merge有何区别?

回答

我是大山

四个集合算法均要求两个已排序(排序序)的范围且均输入有序序列:1)set_union—取并集(重复元素取较大次数);2)set_intersection—取交集(重复元素取较小次数);3)set_difference—取差集(在[first1,last1)中但不在[first2,last2)中的元素);4)set_symmetric_difference—取对称差(在任一集合中但不在交集中的元素)。与merge的关键区别:merge保留所有元素(+重复);集合算法对重复元素按计数处理(类似multiset语义)。每个算法的返回值为输出范围的end。复杂度O(n1+n2)。应用:标签系统交集搜索、差异比较工具、数据库查询优化。C++20的ranges版本提供更灵活的投影支持。注意:C++17起支持并行执行策略。