11 STL-set/multiset
重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦!
每一次学习都是为了追求智慧!
写在前面,本篇章主要介绍STL中常用容器set/multiset。
1.1 set基本概念
本质:
set和multiset,属于关联式容器,底层结构是用二叉树实现的。
特性:
所有元素都会在插入时自动被排序。
set和multiset区别:
- set 不允许容器内有重复元素,可重复插入元,但只保存一份。
- multiset 允许容器内有重复元素。
1.2 set构造和赋值
构造函数:
set<T> st; /
/默认构造函数:set(const set &st);
//拷贝构造函数
赋值:
set& operator=(const set &st);
//重载等号操作符
示例:
1.3 set大小和交互
函数原型:
size();
//返回容器中元素的数目empty();
//判断容器是否为空swap(st);
//交换两个集合容器
示例:
1.4 set插入和删除
函数原型:
- insert(elem); //在容器中插入元素。
- clear(); //清除所有元素
- erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
- erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
- erase(elem); //删除容器中值为elem的元素。
示例:
1.5 set查找和统计
函数原型:
- find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
- count(key); //统计key的元素个数。set 只会返回0和1,multiset是0和n。
示例:
1.6 set和multiset区别
区别:
(1) 能否插入重复数据:
se不可以,multiset可以;
(2) 插入数据后返回插入成功失败结果:
set 返回;multiset不返回,所以可以插入重复数据。
示例:
1.7 pair对组创建
功能:
成对出现的数据,可以用队组来承载。
函数原型:
- pair<type, type> p (val1, val2); //创建队组
- pari<type, type> p = make_pair(val1, val2); //创建队组
- p.first // 获取第一个元素
- p.second // 获取第二个元素
示例:
1.8 set容器排序
问题:
set 容器在插入时会自动给数据排序,且默认是从小到大。那么如果改变排序规则?
方法:
利用防函数,来改变排序规则。
特性:
set存放自定义数据类型,必须指定排序规则;
且指定规则为主键,重复数据只能存入一份。
示例: set存放内置数据类型排序规则从大到小
示例: set存放自定义数据类型排序规则从大到小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!