引言

在STL中,有两种很常见的关联容器,分别是set和map,序列容器的元素是按照在容器中的位置来顺序保存和访问的,而关联容器的元素是按关键元素来保存和访问的。所以关联容器经常用在关键字的查找中,效率很高,这里就简单介绍一下这两种容器,为下面即将学到的一种数据结构**哈希表(散列表)**做一个基础铺垫。

set/multiset/unordered_set容器

简介
set里面每个元素只存有一个key,保证查询的高效性,且所有元素都会在插入时被自动排序
set其实就类似于数学中的集合
本质
set的底层是由红黑树实现的(一种平衡二叉搜索树)
特点
不会出现重复的元素
会由元素大小自动排序
无法直接修改元素
高效的插入删除操作

下面介绍一些基本操作(这里就着重介绍set一些不同的,大部分内容和之前一些容器的操作是一样的)

插入和删除
set增添元素就需要用到insert,因为它并没有push之类的操作,其余的操作还是有类似的
insert(elem); //在容器中插入元素。
clear(); //清除所有元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(begin, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem); //删除容器中值为elem的元素。(这个直接删除很方便)
查找和统计
⚠️查找需要尤为注意,因为很多时候都要用到查找操作,一定要注意它的返回值是一个迭代器,还有查找失败时返回的是set.end()
find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key); //统计key的元素个数

set和multiset的主要区别就在于
set不予许插入重复的数据
multiset允许插入重复的数据

对于unordered_set,它和set的区别在于
unordered_set底层实现是哈希表,所以当我们需要使用集合来解决哈希问题时,优先选择unordered_set,因为它的查询和插入删除操作是最优的;

其实set/multiset/unordered_set这三种区别不是特被大,这里一些基本操作都是通用的,所以就不重复介绍了,记住它们间的不同点即可

map/multimap/unordered_map

简介
map是一种key-value型容器,即所有的数据都是pair(pair可以创建一个对组,同时返回的是两个数据pair<type1, type2> p)
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值),所以可以理解为:map其实就是数学中的映射
本质
map的底层实现也是红黑树
特点
高效的插入和删除操作
查找元素迅速(由key找到value)
可以通过key修改value的值
支持[]下标访问
所有元素会根据元素键值(key)进行排序(和value无关)

基本操作

构造(注意:key和value的类型可以不相同的,如果还是不明白,建议看看pair的操作就清楚了)
map<T1, T2> m;
插入和删除(和set没什么大区别)
insert(elem); //在容器中插入元素。
这里插入注意一下,有四种插入方法
map<int, int> m;//第一种插入方式m.insert(pair<int, int>(1, 10));//第二种插入方式m.insert(make_pair(2, 20));//第三种插入方式m.insert(map<int, int>::value_type(3, 30));//第四种插入方式m[4] = 40; //重载了[]
这里建议用前两中的一种,哪个顺眼用哪个,后两种了解即可clear(); //清除所有元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(key); //删除容器中值为key的元素。
查找和统计(set一样)
find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
count(key); //统计key的元素个数

map和multimap区别:
map不允许容器中有重复key值元素
multimap允许容器中有重复key值元素

map和unordered_map区别
unordered_map底层实现是哈希表,查找效率更高,同样在哈希问题中优先选择;

总结

这里其实只是简单介绍了一下set和map,很多东西都有省略,目的其实为了接下来的哈希表的学习,它们区别只有真正使用才能体会出来,这里只做一个初步了解就可以了;

set/multiset/unordered_set和map/multimap/unordered_map基础汇总相关推荐

  1. 【C++】set/multiset/map/multimap

    文章目录 一.set/multiset (集合) 1 set概念(自动排序.底层红黑树) 2 set构造和赋值(默认.拷贝.=赋值) 3 set大小和交换(size.empty.swap) 4 set ...

  2. STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

    目录 前言 [1]stack操作以及应用 stack的几个核心接口 利用stack完成进制转换 [2]priority_queue操作以及应用 priority_queue的几个核心接口 利用prio ...

  3. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)

    1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...

  4. C++ set与map、unordered_map、unordered_set与哈希表

    哈希表           表: 存储数据 key –> value; 用表来存储数据结构的困难: 查找困难.一个一个key去比较去查找,效率不高.因此有了Hash算法加快查找; 将字符串的ke ...

  5. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

  6. C++中的map问题+unordered_map问题

    目录 4.map问题+unordered_map问题 4.1 map 4.1.1 map的使用 4.1.2 构造map 4.1.3 往map中插入元素 4.1.4 在map中查找元素 4.1.5 删除 ...

  7. 原 c++中map与unordered_map的区别

    c++中map与unordered_map的区别 头文件 map: #include < map > unordered_map: #include < unordered_map ...

  8. STL系列:map和unordered_map

    map和unordered_map的使用 unordered_map的用法和map是一样的,提供了insert,size,count,find等操作,并且里面的元素也是以pair类型来存贮的. 其底层 ...

  9. C++ map和unordered_map详解

    C++ map和unordered_map详解 官方文档链接 概述   C++中map和unordered_map提供的是一种键值对容器,在实际开发中会经常用到,它跟Python的字典很类似,所有的数 ...

最新文章

  1. JVM调优之实战案例(六)(转载)
  2. win10安装misql8_Win10下免安装版MySQL8.0.16的安装和配置教程图解
  3. mysql 上一条_mysql选择上一条、下一条数据记录
  4. ptyhon中文本挖掘精简版
  5. scala中循环守卫_Scala中的循环
  6. java plug机制_【maven实战】20-插件解析机制
  7. 对软件工程的问题及个别软件的分析
  8. NYOJ 570欧拉函数求和(欧拉函数数论入门)
  9. OpenSearch 讲解
  10. 子账号授权服务器,京东子账号装修权限之怎么授权使用详情页模板市场?
  11. 雷蛇鼠标垫真假区分_您真的需要鼠标垫吗?
  12. C#毕业设计——基于C#+asp.net+SQL server的物料管理系统(ERP)设计与实现(毕业论文+程序源码)——物料管理系统(ERP)
  13. html文件关联异常怎么修复,在Win7系统中,如何修复exe文件关联错误?
  14. 【线性代数(6)】范德蒙德行列式及克莱姆法则
  15. c语言过磅系统,衡安无人值守地磅称重系统过磅流程
  16. 河南省普通高中学业水平测试计算机,河南省普通高中信息技术学业水平测试综合测试题3(有答案)...
  17. 【摸鱼吃瓜工作录】刚到公司,如何让项目经理对你刮目相看
  18. 如何设计一个注册中心
  19. anaconda 换清华镜像源 windows
  20. 这些年,为保住阿里饭碗学习的并发编程

热门文章

  1. mysql 隐式锁和显示锁_锁的类型以及粒度,两段锁协议,隐式和显示锁
  2. mysql多源复制脚本_Mysql多源复制
  3. Facebook解释“宕机”原因:主干路由器配置变化致通信中断,未发现用户数据受影响...
  4. 数据中心着火,工程师用嘴一吹就灭了?
  5. 数据中心机房供电需求有哪些?存在哪些电能质量问题?
  6. 关于数据中心基础架构管理
  7. 人工智能到底威胁人类还是造福人类?
  8. sklearn之pipeline:pipeline的简介、使用技巧、案例应用之详细攻略
  9. Py之torchvision:torchvision库的简介、安装、使用方法之详细攻略
  10. 成功解决OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2