• 【C++】常用集合算法


    0.前言

    在这里插入图片描述

    1.set_intersection

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    #include 
    using namespace std;
    
    
    // 常用集合算法 交集set_intersection
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	TargetV.resize(min(v1.size(), v2.size()));
    
    	vector<int>::iterator Itend = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    
    	for_each(TargetV.begin(), Itend, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

    2.set_union

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    #include 
    using namespace std;
    
    
    // 常用集合算法 并集set_union
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	//目标容器提前开辟空间
    	//最特殊情况 两个容器没有交集, 并集就是两个容器size相加
    	TargetV.resize(v1.size() + v2.size());
    
    	vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述

    3.set_difference

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    #include 
    using namespace std;
    
    
    // 常用集合算法 差集set_difference
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	//给目标容器开辟空间
    	//最特殊情况 两个容器没有交集 取两个容器中大的size作为目标容器开辟空间
    	TargetV.resize(max(v1.size(), v2.size()));
    
    	vector<int>::iterator itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), TargetV.begin());
    	
    	cout << "v2和v1的差集:" << endl;
    	set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), TargetV.begin());
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    
    	cout << "v1和v2的差集:" << endl;
    	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    在这里插入图片描述

  • 相关阅读:
    动态规划(蓝桥杯 C++ 题目 代码 注解)
    39、jenkins持续集成(二)
    [21天学习挑战赛——内核笔记](七)——内核对象(Kernel object)机制
    PHP 生成微信小程序码,并存储图片
    Python处理时空数据常用库案例及练习
    VS编译器常见的错误
    opencv用自适应直方图均衡化函数cv2.createCLAHE()提高对比度
    Python大语言模型实战-利用MetaGPT框架自动开发一个游戏软件(附完整教程)
    【Java成王之路】EE初阶第二十四篇: Servlet
    深圳市福田区支持文化创意产业发展若干措施
  • 原文地址:https://blog.csdn.net/m0_48808835/article/details/132811266