当前位置: 首页 > news >正文

C++集合运算函数总结-

集合必须是有序的,

merge:将两个有序范围合并到一个新的有序范围中。

set_union:将两个有序集合的并集存储到第三个集合中。

set_difference:将第一个有序集合中不在第二个有序集合中的元素存储到第三个集合中。

set_symmetric_difference:将两个有序集合的对称差(即在其中一个集合中但不在另一个集合中的元素)存储到第三个集合中。

set_intersection:将两个有序集合的交集存储到第三个集合中。

1. merge:将两个有序范围合并到一个新的有序范围中

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> set1 = {1, 3, 5, 7, 9};std::vector<int> set2 = {2, 4, 6, 8, 10};std::vector<int> result;// 预分配结果向量的大小result.resize(set1.size() + set2.size());// 使用 std::merge 合并两个有序集合std::merge(set1.begin(), set1.end(), set2.begin(), set2.end(), result.begin());// 输出结果std::cout << "Merged: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

output:

Merged: 1 2 3 4 5 6 7 8 9 10

2. set_union:将两个有序集合的并集存储到第三个集合中

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(result));std::cout << "Union: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

output:

Union: 1 2 3 4 5 6 7 8 

3. set_difference:将第一个有序集合中不在第二个有序集合中的元素存储到第三个集合中

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(result));std::cout << "Difference: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}
output:Difference: 1 2 3 

如果set1 = {1,2,3,4,4,5}, 则结果是:1 2 3 4

4. set_symmetric_difference:将两个有序集合的对称差(即在其中一个集合中但不在另一个集合中的元素)存储到第三个集合中

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(result));std::cout << "Symmetric Difference: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

output:

Symmetric Difference: 1 2 3 6 7 8 

5. set_intersection:将两个有序集合的交集存储到第三个集合中

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(result));std::cout << "Intersection: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}
output:Intersection: 4 5 

使用 C++20 的 ranges 库可以使代码更加简洁和易读。以下是使用 C++20 ranges 实现 std::merge、std::set_union、std::set_difference、std::set_symmetric_difference和 std::set_intersection的示例:

1. std::ranges::merge

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> set1 = {1, 3, 5, 7, 9};std::vector<int> set2 = {2, 4, 6, 8, 10};std::vector<int> result;std::ranges::merge(set1, set2, std::back_inserter(result));std::cout << "Merged: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

 2. std::ranges::set_union

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::ranges::set_union(set1, set2, std::back_inserter(result));std::cout << "Union: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

3. std::ranges::set_difference

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::ranges::set_difference(set1, set2, std::back_inserter(result));std::cout << "Difference: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

4. std::ranges::set_symmetric_difference

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::ranges::set_symmetric_difference(set1, set2, std::back_inserter(result));std::cout << "Symmetric Difference: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

5. std::ranges::set_intersection

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> set1 = {1, 2, 3, 4, 5};std::vector<int> set2 = {4, 5, 6, 7, 8};std::vector<int> result;std::ranges::set_intersection(set1, set2, std::back_inserter(result));std::cout << "Intersection: ";for (int n : result) {std::cout << n << " ";}std::cout << std::endl;return 0;
}


http://www.mrgr.cn/news/62939.html

相关文章:

  • qt QStackedLayout详解
  • 力扣227:基本计算器II
  • 【机器学习基础】激活函数
  • [ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源
  • SpringBoot中的Json工具类
  • 栈和队列(下)-队列
  • DCS系统
  • LVGL盒子模型的概念
  • 五、鸿蒙开发-组件状态管理
  • OpenCSG携手书生·浦语:InternLM2.5-20B-Chat 正式上线,共建AI未来新生态
  • 哪里能找到海量短视频素材和制作教程?
  • 高效记录编程笔记
  • Spring IOC
  • 使用UDP实现发送和接收
  • 数据结构,问题 C: 后缀表达式
  • 《别了,浔川社团官方;你好,浔川社团官方联合会》
  • 很抽象但是好用的方法打败Vue框架第一天-Vue项目构建原神前端界面(Vue+js+html+css+jquery)
  • 搭建WIN32的开发环境
  • 高并发设计模式之ForkJoin模式
  • 客户的奇葩要求—在CAN网络的基础上加入了CAN_FD的节点
  • Redis(持续更新ing。。。)
  • 贪心算法习题其二【力扣】【算法学习day.18】
  • Rust 力扣 - 1343. 大小为 K 且平均值大于等于阈值的子数组数目
  • 博图V19的DB块,批量导入组态王
  • 如何去掉idea的Usage提示
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-9