std::set_symmetric_difference
std::set_symmetric_difference 是 C++ 标准库 头文件中的一个函数模板,用于计算两个已排序序列的对称差集。
什么是“对称差集”?
对称差集指的是:只出现在其中一个序列中,但不同时出现在两个序列中的元素的集合。
换句话说,就是:
(集合A - 集合B) ∪ (集合B - 集合A)
或者
(A ∪ B) - (A ∩ B)
#include <iostream>
#include <vector>
#include <algorithm>int main() {// 两个已排序的向量std::vector<int> vec1 = {1, 2, 3, 4, 5, 6};std::vector<int> vec2 = {4, 5, 6, 7, 8, 9};// 准备存放结果的向量,大小至少为两个输入向量大小之和std::vector<int> result(vec1.size() + vec2.size());// 计算对称差集auto it = std::set_symmetric_difference(vec1.begin(), vec1.end(), // 第一个序列vec2.begin(), vec2.end(), // 第二个序列result.begin() // 结果存放位置);// it 指向结果序列的末尾,调整 result 的大小result.resize(std::distance(result.begin(), it));// 输出结果std::cout << "Symmetric Difference: ";for (int n : result) {std::cout << n << ' ';}std::cout << '\n';return 0;
}
结果:
Symmetric Difference: 1 2 3 7 8 9