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存放自定义数据类型排序规则从大到小