当前位置:   article > 正文

【c++】set、map用法详解

【c++】set、map用法详解

1. 关联式容器

  1. 序列式容器:vector、list、deque、forward_list等这些容器统称为序列式容器,底层是线性序列的数据结构,存储的是元素本身。插入方式一般为push。
  2. 关联式容器:set、map、multiset、multimap等这些容器统称为关联式容器,也是用来存储数据,但存储的是<key,value>结构的键值对,数据检索的效率比序列式容器高。插入方式一般为insert。

2. 键值对

2.1 :pair

概念:用来表示具有一一对应关系的一种结构,这种结构中一般存储两个成员变量key和value,key表示键值,value表示与key对应的信息。eg:英汉词典、单词的个数。

image.png

  • pair中的first为key,second为value。

2.2:make_pair

image.png
image.png

  • 概念:是一种可用来构造pair类型对象的函数模板。
  • 参数x用来初始化pair中第一个元素的值,参数y用来初始化pair中第二个元素的值。make_pair(x, y)返回值为pair<T1, T2>(x, y),为匿名对象。

3. 树形结构的关联式容器

  1. STL中总共有两种不同结构的管理式容器:树形结构和哈希结构。
  2. 树形结构的关联式容器主要有四种:set、multiset、map、multimap,共同特征:底层为平衡二叉树(红黑树),容器中的元素是有序序列。

3.1:set

image.png

  1. set是按特定顺序存储唯一元素的容器。使用迭代器遍历set中的元素,进行中序遍历,可以得到一个有序序列。
  2. set具有排序+去重的功能。set中元素必须不能重复,可以用set进行去重。set中元素类型为const T,所以set中的元素不能被修改,但可以在容器中插入或者删除他们。
  3. set中元素value就是key,所以set在插入元素时,只需要插入value即可,不需要构造键值对。与map、multimap不同,map、multimap中存储的是<key,value>键值对,set中只存储value,但在底层中实际存放的是由<value, value>构成的键值对。
  4. 在默认情况下,set中仿函数为less,元素是按照小于来比较,元素呈升序进行排序。set在底层使用平衡二叉搜索树(红黑树)来实现,所以set查找某个元素时,时间复杂度为O(logn)。
  5. set容器通过key访问单个元素的速度通常比unordered_set容器慢,允许根据顺序直接对子集进行迭代,即:因为set的有序性,当你迭代一个set时,会按照元素被添加到集合中的顺序看到它们。

构造函数

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签