C++ 如何找到两个集合的交集?
从包含两个集合的值的两个集合中创建子集的最有效方法是什么?任何C++ STL库都可以用来解决这个问题(如果没有升压库): 您可以使用,您将在那里找到一个如何使用它的示例:C++ 如何找到两个集合的交集?,c++,algorithm,stl,set,set-intersection,C++,Algorithm,Stl,Set,Set Intersection,从包含两个集合的值的两个集合中创建子集的最有效方法是什么?任何C++ STL库都可以用来解决这个问题(如果没有升压库): 您可以使用,您将在那里找到一个如何使用它的示例: #include <iostream> #include <vector> #include <algorithm> #include <iterator> int main() { std::vector<int> v1{2, 3, 5, 7, 11};;
#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 << ' ';
}
您可以使用,您将在那里找到一个如何使用它的示例:
#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 << ' ';
}
使用
std::set_intersection
,如下所述:
使用
std::设置交叉口
,如下所述:
你已经看过
std::set
了吗?@bigOTHER的回答是正确的,但这个问题是“如何”问题还是算法问题?(如果是算法问题,那么集合是有序的)。你已经看过std::set
了吗?@bigOTHER的答案是正确的,但是这个问题是“如何”问题还是算法问题?(如果是算法,并且集合是有序的),那么至少链接更好的。@LogicStuff更新, thanks@bigOTHER我的意思是,主要是因为输出中缺少更清晰的示例.11,因为当硬编码值(如5)而不是使用std::begin
和std::end
)时,会出现一个典型的错误。@LogicStuff我更新了示例,至少链接更好。@LogicStuff更新, thanks@bigOTHER我的意思是,这主要是因为更清楚的例子。11由于在5的硬编码值而不是使用<代码> STD::开始< < /C> >和<代码> STD::结束< /COD>:当我在查阅C++文档时更新了示例,我更喜欢,因为第一个是更频繁的。谢谢,我会记住这个。当我查阅C++文档时,我喜欢,因为第一个比后者更正确。谢谢,我会记住这个。
3 5 7 11