容器学习 set multiset

容器 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()  //移除所有元素,把容器清空

 

好了容器空了 我就不写了

上一篇:(C/C++学习)28.STL之list容器


下一篇:顺序表 数据调整