取两个vector的交集
时间: 2024-03-09 13:20:46 浏览: 53
可以使用set_intersection函数来实现取两个vector的交集。
示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 = {1, 2, 3, 4};
std::vector<int> vec2 = {3, 4, 5, 6};
// 先将vec1和vec2排序
std::sort(vec1.begin(), vec1.end());
std::sort(vec2.begin(), vec2.end());
// 定义一个存储交集的vector
std::vector<int> intersection;
// 使用set_intersection函数获取交集
std::set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(intersection));
// 输出交集
for (auto x : intersection) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果:
```
3 4
```
相关问题
c++ 多个vector 取交集
在 C++ 中,如果你想从两个或更多的 `std::vector` 中获取交集,你可以使用集合容器如 `std::set` 或者 `std::unordered_set`,因为它们提供自动去重并且支持快速查找的功能。以下是利用 `std::set` 实现交集的基本步骤:
1. 首先,将每个 `vector` 转换为 `set`。`set` 的插入操作会自动删除重复元素,所以这一步可以得到无重复的集合。
```cpp
std::set<int> set1(vector1.begin(), vector1.end());
std::set<int> set2(vector2.begin(), vector2.end());
```
2. 然后创建一个新的 `set` 来存储结果,并通过迭代器添加所有 `set1` 和 `set2` 中存在的值。
```cpp
std::set<int> intersection;
intersection.insert(set1.begin(), set1.end());
intersection.insert(set2.begin(), set2.end());
```
3. 如果想保留原始顺序,可以使用 `std::merge` 函数结合两个有序序列,但是这种方式无法保证元素顺序一致,如果需要保持原有顺序,`std::vector<std::pair>` 将是一个选择,但计算复杂度会较高。
```cpp
// 但这通常不推荐,因为可能会导致效率下降
std::vector<int> result(intersection.begin(), intersection.end());
```
c++ vector取交集、并集
回答: 要计算两个vector的交集和并集,可以使用STL中的算法和容器操作。首先,我们需要包含头文件<set>和<algorithm>。然后,我们可以使用set容器来存储vector中的元素,因为set会自动去重。接下来,我们可以使用set_intersection算法来计算两个vector的交集,使用set_union算法来计算两个vector的并集。
下面是一个示例代码,展示了如何计算两个vector的交集和并集:
```cpp
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
int main() {
int a[6] = {1, 2, 3, 4, 5, 6};
int b[4] = {4, 5, 6, 7};
std::vector<int> vectorA(a, a + 6);
std::vector<int> vectorB(b, b + 4);
std::set<int> setA(vectorA.begin(), vectorA.end());
std::set<int> setB(vectorB.begin(), vectorB.end());
std::set<int> intersection;
std::set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(), std::inserter(intersection, intersection.begin()));
std::set<int> unionSet;
std::set_union(setA.begin(), setA.end(), setB.begin(), setB.end(), std::inserter(unionSet, unionSet.begin()));
std::cout << "Intersection: ";
for (auto it = intersection.begin(); it != intersection.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Union: ";
for (auto it = unionSet.begin(); it != unionSet.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
```
这段代码首先将两个数组转换为vector,然后使用set容器存储vector中的元素。接下来,使用set_intersection算法计算两个set的交集,并使用set_union算法计算两个set的并集。最后,通过遍历set来输出交集和并集的元素。
希望这个例子能够帮助你理解如何计算vector的交集和并集。
阅读全文