如何找到 2 组的交集?
How do I find the intersection of 2 sets?
从 2 个集合中创建一个包含两个集合值的子集的最有效方法是什么?任何 C++ STL 库都可以用来解决这个问题(如果可能,不用 Boost 库):
Set A = {2, 3, 5, 7, 11, ...}
Set B = {1, 3, 5, 7, 9, 11, ...}
Subset should be = {3, 5, 7, 11, ...}
您可以使用 set_intersection
来完成它,您会在那里找到如何使用它的示例:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{2, 3, 5, 7, 11};;
std::vector<int> v2{1, 3, 5, 7, 9, 11};
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> v_intersection;
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_intersection));
for(int n : v_intersection)
std::cout << n << ' ';
}
结果将是:
3 5 7 11
按照此处所述使用 std::set_intersection
:
http://www.cplusplus.com/reference/algorithm/set_intersection/
从 2 个集合中创建一个包含两个集合值的子集的最有效方法是什么?任何 C++ STL 库都可以用来解决这个问题(如果可能,不用 Boost 库):
Set A = {2, 3, 5, 7, 11, ...}
Set B = {1, 3, 5, 7, 9, 11, ...}
Subset should be = {3, 5, 7, 11, ...}
您可以使用 set_intersection
来完成它,您会在那里找到如何使用它的示例:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{2, 3, 5, 7, 11};;
std::vector<int> v2{1, 3, 5, 7, 9, 11};
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> v_intersection;
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_intersection));
for(int n : v_intersection)
std::cout << n << ' ';
}
结果将是:
3 5 7 11
按照此处所述使用 std::set_intersection
:
http://www.cplusplus.com/reference/algorithm/set_intersection/