STL容器 -- Set
2024-09-04 16:02:41
核心: set 是一个数学含义上的集合-----保证了每个数的确定性, 互异性, 不仅如此, set 中的元素还是有序的.
头文件: #include <set>
拓展:由于 set 内的元素是唯一的, 即不会出现相同值的元素,所以无法存储重复值.如果要想存储重复值那么可以用 multiset.
构造方法:
set<int> s1; //定义一个 int 类型的set, 默认排序是从小到大的.
set<int> s2(s1); //定义一个 int 类型的set, 其初始值从集合 s1 拷贝而来.
int arv[] = {, , , };
set<int> s3(arv, arv + ); //利用迭代器 [ begin(), end() ) 里面的元素构建一个集合
利用仿函数构造:
set< int, greater<int> > s1; //可以改变默认排序规则,按照降序排序
自定义比较函数构造:
const char* s[] = {"", "", "", "", ""};
struct cmp{
bool operator () (const char* a, const char* b) const {
return strcmp(a, b) > ; //按照字典序降序排列
}
};
set<const char*, cmp> s1(s, s + , cmp());
集合的遍历:
set<const char*, cmp>::iterator it;//迭代器类型和集合类型一致
for(it = s1.begin(); it != s1.end(); it++) {
cout << *it << endl;
}
集合的插入:
s1.insert(value);//插入value,返回pair配对对象,可以根据.second判断是否插入成功,有可能因为重复元素而插入失败
集合的删除:
s1.erase(value) //移除 s1 内元素值为value的所有元素,返回移除的元素个数
s1.erase(&pos) //移除pos位置上的元素,无返回值
s1.erase(&first, &last) //移除迭代器[&first, &last)区间内的元素,无返回值
s1.clear() //移除容器 s1 内所有元素
集合的查找:
s1.count(value); //返回 s1 内元素值为value的元素个数, 为 ”1“ 或者 ”0“
s1.find(value); //返回 s1 内 value 所在位置,找不到 value 将返回end();
自己定义类型必须重载 ”<“
struct NODE{
int x; int y;
bool operator < (const NODE& b) const {
if(x == b.x) return y > b.y; //二级排序为 y 的降序
return x < b.x; //一级排序为 x 的升序
}
};
set<NODE> s1;
其他关于集合的操作:
s1.swap(s2); //将集合 s1 和集合 s2 互换 //获得两个集合的 并
set<int> s1, s2, s3;
set_union( s1.begin(),
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
); //获得两个集合的 交
set<int> s1, s2, s3;
set_intersection( s1.begin(),
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
); //获得两个集合的 差
set<int> s1, s2, s3;
set_difference( s1.begin(), //set_symmetric_difference 为对称差 即 A 交 B - A 并 B
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
);
最新文章
- JS动态引入js,CSS——动态创建script/link/style标签
- video 播放
- iOS应用第三方推送的添加
- 【随笔】使用mOnOwall封禁某一个ip
- rpm常用选项
- OD hit跟踪 run跟踪使用问题
- git学习笔记03-本地git常用操作及原理-文件增删改
- 安装软件(名称不记得了)后,系统开机提示 visual studio just-in-time debugger窗口(WINDOWS错误提示框)
- db2数据库Date相关函数
- Linux与Windows的8个不同
- pip 安装python环境及打包
- 使用tortoisegit工具git地址中带号码密码的拉取,以及使用这种方式后中途重置密码报git remote: HTTP Basic: Access denied 错误解决办法
- 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)
- HTTP Method小结
- OI生涯回忆录 2017.9.10~2018.11.11
- Gitlab8.5安装后邮件发送不成功的解决过程
- 我的grunt学习笔记
- C# 批量生成邮箱地址代码
- 内存管理 初始化(二)bootmem位图分配器建立 及 使用
- Python -- Gui编程 -- Tkinter的使用 -- 基本控件
热门文章
- ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
- 持久化的基于L2正则化和平均滑动模型的MNIST手写数字识别模型
- 《Apache HttpClient 4.3开发指南》
- 解决tomcat占用8080端口问题图文详解
- 782C. Andryusha and Colored Balloons DFS
- 动态内容的缓存技术:CSI vs SSI vs ESI
- 【BZOJ】1485: [HNOI2009]有趣的数列
- 【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS
- 用C++写一个没人用的ECS
- 用jquery实现小火箭到页面顶部的效果