11 STL-set/multiset
2023-04-18 15:26:12 时间
重新系统学习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存放自定义数据类型排序规则从大到小
相关文章
- Django-Virtualenv虚拟环境安装、新建,激活和手动指定Python解释器、虚拟环境安装Django、创建Django项目、运行Django项目
- 《分布式技术原理与算法解析》学习笔记Day03
- 在vscode中创建vue项目
- 微信小程序反编译简易教程与wxappUnpacker使用
- 《分布式技术原理与算法解析》学习笔记Day02
- SpringBoot访问windows共享文件
- vue3 antd项目实战——input输入框限制输入内容和长度,Form表单动态校验规则
- 《分布式技术原理与算法解析》学习笔记Day01
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
- 【Javaweb学习笔记】在Eclipse中创建Web项目
- 《RPC实战与核心原理》学习笔记Day16
- scrapy框架爬虫
- 云原生场景下实现编译加速
- 读Java8函数式编程笔记07_设计和架构的原则
- 《RPC实战与核心原理》学习笔记Day14
- React中使用Redux (一) - 在React中直接使用Redux
- vue3移动端适配的解决方案
- 函数柯里化详解
- 读Java8函数式编程笔记06_Lambda表达式编写并发程序
- 洛谷oj题单【入门1】顺序结构-入门难度(Java)