akcsdno 2020-03-06
容器 set 和 multiset
第三次了 我又把写好的关了 打开什么也没了
它们干嘛的:就是两个以一定的排序原则对元素进行排序的容器
排序原则 有默认的
也可以自己写(我猜应该和优先队列进行结构体排序那样 自己写)
区别: set不能忍受相同元素 multiset可以
(那我要set干嘛,都用multiset不就可以了,当然不是。。。)
特点:
1.他们不提供直接用来存取元素的如何操作
(举个一部分的例子:也就是你不能直接修改容器里面的值,要把这个值弹出把新值插入。)
2.他们通过迭代器进行元素的存取
头文件:include<set> //两个都是这个头文件哦 一家人嘛。。
操作:(set 和 multiset一样 所以我只写set的,multiset就把set改为multiset就好)
(有些操作不怎么用 不过怕以后遇见我就都写这里)
这些以构建为主
0.set<int>a; //定义一个int类型的容器a
1.set a; //产生一个空的set
2.set a(op) //以op排序为准 产生一个空的set (op有默认规则,也可自己重载规则)
3.set a1(a2) //产生一个副本 所有元素都一样
4.set a(beg,end) //区间[beg,end) 的元素产生一个set
5.set a(beg,end,op) //以op排序为准 同4...
6.c.~set() //销毁所有元素,释放内存
7.set<Elem> //以 operator < 排序为准,产生一个set
8.set<Elem,op>//以 op排序为准,产生一个set
这些以不变动为主
设a为一个set
9. a.size() // 返回当前元素的数量
10. a.empty() //判断set的大小是否为0 (就是判断a.size()是否等于0)
11. a.max_size() //返回能容纳元素的最大数量
这些是迭代器相关函数(前面特点提到过,无法调用变动性的算法)
set和multiset 都是双向迭代器
12. a.begin() //返回容器的第一个元素
13. a.end() //返回容器的最后一个元素的下一个位置 就是没有呗 所以要找最后一个元素 --a.end() 就行了
14. a.rbegin() //返回逆向迭代器的第一个元素
15. a.rend() //返回逆向迭代器的最后一个元素的下一个位置
这些以函数为主(搜寻为主)
设a为一个set
16. a.count(elem) //返回元素值为elem的元素个数
17. a.find(elem) //返回元素值为elem的元素,如果找到elem就返回a.end()
18. lower_bound(elem) //返回元素值为elem的第一个可安插的位置 就是元素值 >= elem的第一个元素的位置
19. upper_bound(elem) //返回元素值为elem的最后一个可安插位置 就是元素值 > elem的第一个元素位置
20. equal_range(elem) //返回elem可以安插的第一个位置,也就是元素值 == elem的区间
这些是赋值
设a1,a2为set
21. a1 = a2 //把a2的元素都给a1
22. a1.swap(a2) //把a1和a2的元素互换
这些是 插入和删除(一些没写了)
23. a.insert(elem) //插入一个元素
24. a.erase(elem) //删除与elem相等的所有元素,返回被删元素的个数
25 a.erase(pos) //删除迭代器pos所指位置元素,无返回值
就是前面那些迭代器相关的函数
举个例子a.erase(--a.end())删除容器最后一个元素
26 a.insert(pos,elem) //为什么这个写在25后面 嘿嘿你懂pos那就没事了 从pos开始搜索来插入一个元素 这样可以提升效率吧。。
27 a.clear() //移除所有元素,把容器清空
好了容器空了 我就不写了