美文网首页
30 STL(八)set/multiset容器

30 STL(八)set/multiset容器

作者: ca8519be679b | 来源:发表于2021-01-24 12:36 被阅读0次

P基本概念

set插入时会被自动排序,底层结构是二叉树实现。区别是set不允许有重复元素,而mulitset允许

两者共用一个头文件<set>

构造和赋值

1

构造一个是默认构造,一个是拷贝构造,赋值是=重载的操作符,set没有push类方法只有insert(val)方法,而且自动排序,无pos可言

2

如上,我们使用set给插入降序,结果出来却是升序的,注意迭代器还可以使用begin,end获取,但是不能使用<,为了好记,一般迭代器都建议使用!=

set容器是去重的,我们可以插入重复的值,但是只有一个

大小和交换

3

如上,方法很简单,不允许重新指定大小

4

插入和删除

5

如上,插入和删除只有insert和erase,clear实现清空

6

如上,我们实现了各种方法,当然set也有erase删除所有重复元素的方法,当然对于set就是删除对应元素,对于multiset就是删除所有元素

查找和统计

7

如上,查找find返回迭代器指针,count对于set来说就是0,1,如果是multiset可以用于统计重复元素的个数

8

如上,代码是没什么说的

set和multiset区别

9

我们之前使用insert给set插入数据,其实是有返回值的,如上,我们可以看到内容,返回的是_Pairib对象

10

而其我们查看定义其实是个pair对象,由迭代器和bool值来返回,其中bool值用于返回是否插入成功

11

如上,我们使用pair类型去接收,其可以使用second属性(不是方法)获得到bool值,当然我们也可以用int接收,可以看到结果是第一次可以insert成功,第二次就不可以了、

12

当然multiset就不用了,因为其只返回迭代器对象,所以不用判断是否成功,重复也可以往里插

pair对组

上节课我们使用set的insert方法返回的是pair对组

13

这次我们好好研究下,其创建方法如上2种,注意格式,pair对象,指定模板的2个对象类型,变量名然后小括号里面给初始值,另一种是使用make_pair方法传入2个值给pair对象初始化,我们可以使用p对象的first,second属性来获得这2个属性对象

14

如上,方法调用没什么说的,相当于python的二元组

set容器排序

我们知道set默认的排序是升序的,如果我们想修改其为降序存储,就需要使用仿函数

15

如上,我们先正常输出,其实升序的;

16

如上,其实现是使用构造的重载,指定默认的排序器,这里排序器我们使用了仿函数,本质就是重载了()方法的类,可以将类实现调用当函数使用,(类似python实现__call__),别的就没什么说的了

17

仿函数有什么作用呢,如果我们insert自定义类型,set就不会识别该按什么排序了,就需要我们使用自定义仿函数规则

18

如上,就是自定义了个仿函数,其实也没什么可说的

相关文章

  • 30 STL(八)set/multiset容器

    P基本概念 set插入时会被自动排序,底层结构是二叉树实现。区别是set不允许有重复元素,而mulitset允许 ...

  • C++ STL 集合类常用记录

    STL中关于集合的容器主要是set,multiset,unordered_set和unordered_multis...

  • STL容器之set/multiset

    构造函数 赋值操作 大小操作 插入 删除 实例 查找 实例 更改set容器排序规则 自定义数据 寻找上下限 实例 ...

  • STL:set,multiset

    sethe和multiset会在插入元素时,若元素为常见类型,会对元素进行排序,可以自定义排序,默认为从小到大。

  • Boolan_STL与泛型编程_第三周笔记

    本周课程重点讲解了容器deque、容器queue、容器rb_tree、容器set/multiset、容器map/m...

  • STL细节

    容器分为三种1.序列性容器 vector list deque2.关联型容器 set multiset map...

  • STL容器set基础使用

    STL容器之set 一、什么是set? set关联式容器。 set作为一个容器也是用来存储同一数据类型的数据类型,...

  • STL(一)vector、set/multiset、list

    Vector 动态数据,可以随机访问。末尾添加和删除的效率高。元素的顺序和推入的顺序一致。 基本函数 push_b...

  • STL六大组件

    STL STL六大组件 1.容器(containers):各种数据结构,vector、list、queue、set...

  • monolake 的GeekBand C++开发学习笔记(七)

    前记:进入STL的第二周,本周继续讲解了stl容器:stack,queue,map和multimap,set和mu...

网友评论

      本文标题:30 STL(八)set/multiset容器

      本文链接:https://www.haomeiwen.com/subject/yvjlzktx.html