set 相关函数
来源:互联网 发布:股票比价关系软件 编辑:程序博客网 时间:2024/05/19 16:36
本篇博客主要讲解 STL 中与 set 有关的算法,分别是交集(set_intersection)、并集(set_union)、差集(set_difference )、对称差集(set_symmetric_difference)
参考资料:cpluscplus、Sunnylunch
blbagony@163.com
感谢观看,请多多指教
**注意**
1. 使用这四个函数时必须要保证所传集合有序,在后面的解析你会明白为什需要传递有序的集合,使用时需要包 #include <algorithm>
2. 集合中不能有相同元素,不然有些算法执行错误
3. 四个函数的五个参数都是模板参数,每个函数的前四个参数分别是需要比较的集合一和集合二的起始位置和结束位置(左闭右开下同),最后一个参数是保存结果集合的起始位置。
4. 返回值,所得结果集合最后一个元素的位置
set_union
求两个有序集合的并集,函数模板
实例
解题思路:
set_intersection
求两个集合交集
实例
解题思路:
set_difference
实例
求集合 A 相对于集合 B 中,集合 A 有而集合 B 没有的集合。
set_symmetric_difference
求只属于集合 A 且不属于集合 B 或只属于集合 B 不属于集合 A 的集合
实例
解题思路:
#include <iostream>#include <set>#include <vector>#include <algorithm>int main(){ int first[] = { 5, 10, 10, 15, 20, 25 }; int second[] = { 50, 40, 20, 30, 20, 10 }; std::vector<int> v(10); std::set<int> s1 = { first, first + sizeof (first) / sizeof (first[0]) }; std::set<int> s2 = { second, second + sizeof (second) / sizeof (second[0]) }; std::set<int>::iterator first_1 = s1.begin(); std::set<int>::iterator first_2 = s2.begin(); std::set<int>::iterator last_1 = s1.end(); std::set<int>::iterator last_2 = s2.end(); /*并集*/ std::vector<int>::iterator union_it = std::set_union(first_1, last_1, first_2, last_2, v.begin()); v.resize(union_it - v.begin()); std::cout << "The union has " << (v.size()) << " elements:\n"; for (union_it = v.begin(); union_it != v.end(); ++union_it) std::cout << ' ' << *union_it; std::cout << '\n'; v.clear(); v.resize(10); /*交集*/ std::vector<int>::iterator intersection_it = std::set_intersection(first_1, last_1, first_2, last_2, v.begin()); v.resize(intersection_it - v.begin()); std::cout << "The intersection has " << (v.size()) << " elements:\n"; for (intersection_it = v.begin(); intersection_it != v.end(); ++intersection_it) std::cout << ' ' << *intersection_it; std::cout << '\n'; v.clear(); v.resize(10); /*差集*/ std::vector<int> v1(10); std::vector<int> v2(10); std::vector<int>::iterator diff_it1 = std::set_difference(first_1,last_1, first_2, last_2, v1.begin()); std::vector<int>::iterator diff_it2 = std::set_difference(first_2, last_2, first_1, last_1, v2.begin()); v1.resize(diff_it1 - v1.begin()); std::cout << "Set_1 diff set_2 " << (v.size()) << " elements:\n"; for (diff_it1 = v1.begin(); diff_it1 != v1.end(); ++diff_it1) std::cout << ' ' << *diff_it1; std::cout << '\n'; v2.resize(diff_it2 - v2.begin()); std::cout << "Set_1 diff set_2 " << (v.size()) << " elements:\n"; for (diff_it2 = v2.begin(); diff_it2 != v2.end(); ++diff_it2) std::cout << ' ' << *diff_it2; std::cout << '\n'; /*对称差集*/ std::vector<int>::iterator sym_it = std::set_symmetric_difference(first_1, last_1, first_2, last_2, v.begin()); v.resize(sym_it - v.begin()); std::cout << "set_1 and set_2 diff " << v.size() << " element:\n"; for (sym_it = v.begin(); sym_it != v.end(); ++sym_it) std::cout << " " << *sym_it; std::cout << '\n'; return 0;}
阅读全文
0 0
- set 相关函数
- set函数
- set相关操作源码
- 容器set相关算法
- set的相关操作
- 集合框架--Set相关
- Set相关知识
- Set相关集合
- redis-集合set相关命令
- redis 集合 set 相关命令
- es6中set结构相关
- STL之set相关算法
- STL set相关学习笔记
- stl中set相关算法
- matlab set函数
- newlisp set 函数
- matlab set函数
- matlab set函数
- 方法重载和方法覆盖
- 梳理一下自己
- hadoop之failed task和killed task
- java jdbc链接Oracle,mysql,sql server2012数据库实例
- zabbix3.0邮件报警
- set 相关函数
- Response 异步返回各种格式数据:json xml text Protobuf
- 万丈高楼之基石——C
- [整理]钛极OS(TiJOS)物联网操作系统专题 [JAVA编程控制硬件]
- Python checkio Secret Message解决方案
- 使用gradle实现Android项目debug版与release版共存
- jquery实现图片上传前本地预览功能
- 二分查找与斐波那契数递归与非递归的时间复杂度与空间复杂度
- 数据结构-链表结构