当前位置: 首页 > news >正文

C++学习笔记总结练习:关联容器

关联容器

0 关联容器概述

关联容器与顺序容器的区别

  • 关联容器和顺序容器有着根本不同。关联容器中的元素是按关键字来把偶才能和访问的。书序容器中的元素是按他们在容器中的位置来顺序保存和访问的。

两个基础类型

  • map:键值对key-value。关键字是索引,值表示与索引相关的数据。
  • set:每个元素只包含一个关键字。支持高校的关键字查询操作。

关联容器之间的区别

  • 是一个set或者map
  • 要求不重复的关键字,允许重复的关键字。
  • 按顺序保存元素。无序保存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGBMDZXe-1690857764719)(image/2021-03-06-15-48-08.png)]

关联容器的头文件

  • <map>:map,multimap
  • <set>:set,multiset
  • <unorder_map>:unorder_map,unorder_multimap
  • <unorder_set>:unorder_set,unorder_multiset

有序关联容器的原理

  • 有序关联容器的底层一般使用红黑树实现。
  • 泛型算法通常不对关联容器使用

无序关联容器的原理

  • 一般使用hash表实现存储。

1 关联容器的通用操作

1.1 初始化

  • 与容器部分的初始化一致。支持六种基本的初始化方法。默认初始化、值初始化、直接初始化、赋值初始化、列表初始化、迭代器初始化。不支持constructor(n)和constructor(n,t)的初始化。
  • map、set的定义和初始化
map<string,int> word_count;//空容器
set<string> ex{"the","to"};//初始化set
map<string,int> wc{{"jo",10},{"yin",13},{"kang",53},{"long",3}
};//初始化map
  • multimap、multiset的定义和初始化。允许关键字的重复。
//可以使用顺序容器初始化关联容器multiset初始化
vector<int> vec{1,2,3,4,5,5,4,3,2,1};
set<int> iset(vec.begin(),vec.end());
multiset<int> mset(vec.begin(),vec.end());
cout<<iset.size()<<endl;
cout<<mset.size()<<endl;

2.1 有序关联容器-map

存储内容

pair<key,value>

访问元素

方法说明
[key]map的下标访问运算符。返回pair的值。如果没有该键。则会创建该键。
at(key)map的键访问运算符。返回pair值。如果没有该键。会抛出异常。
iterator find(key)找到某个键。返回指向该键的迭代器。
int count(key)计算某个键的数量。返回该键出现的数量。

添加元素

  • 关联容器的插入操作。通常不需要指定位置。
  • 对于map和set而言。只有当关键字不在容器当中时才会进行插入。如果存在该元素则插入失败。
方法说明
pair<iterator,bool> emplace(args)使用args初始化一个值。插入到关联容器中。iterator指向插入的元素。bool指示是否插入成功。
pair<iterator,bool>insert(val)插入值为val的元素。
pair<iterator,bool>insert(iterator begin,iterator end)插入指定范围的元素。
pair<iterator,bool>insert({a,b,c,})插入初值列表中的元素。
insert(p,v)迭代器只起到提示作用。返回值为迭代器,指向给定关键字的元素
emplace(p,args)迭代器起到提示作用。插入元素。返回值为迭代器。指向给定关键字的元素。

删除元素

方法说明
int erase(key)删除关键字为k的元素。返回删除的元素的数量。
iterattor erase(iterator p)删除迭代器p指向的元素。返回指向下一个元素的迭代器。这种东西都是遍历删除的时候用的。
erase(iterator begin(),iterator end())删除范围内的元素。返回结尾e指向的元素。

2.2 有序管理容器-set

存储内容

key

访问操作

  • 不支持[]和at()访问元素。支持find和count

添加操作

  • 与map一样。只不过操作类型不是pair,而是单个的key

删除操作

  • 与map一样。只不过操作类型不是pair,而是单个的key

3 无序关联容器

说明

  • 不适用比较运算符来组织元素,使用哈希函数和关键字类型的==运算符。
  • 使用无序容器通常更简单,具有更好的效果。
  • 底层是通过哈希函数实现的。所以有很多关于哈希函数的处理操作。

基础操作

  • 与有序关联容器一样

管理桶

  • 无序关联容器相对于普通关联容器的特殊操作。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0WOBUTo-1690857764721)(image/2021-03-06-16-48-05.png)]
http://www.lryc.cn/news/108310.html

相关文章:

  • TypeScript技能总结(二)
  • 整理一些Postgresql工作中常用面试中会问的问题---Postgresql面试题001
  • Xposed回发android.os.NetworkOnMainThreadException修复
  • 【Leetcode】二叉树的最近公共祖先,二叉搜索树转换成排好序的双向链表,前序遍历与中序遍历构造二叉树
  • 途乐证券|互联金融概念爆发,安硕信息“20cm”涨停,高伟达等大涨
  • 计数排序算法
  • 企业高性能web服务器-nginx
  • GaussDB数据库的元数据及其管理简介
  • 合并两个有序链表 LeetCode热题100
  • 【C++】模拟实现string
  • AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?
  • 无人机机巢有哪些,无人机机场/机场的主要分类
  • 联想存储 HH0305_DE4000H 划分卷组、卷、主机
  • 【Python机器学习】实验08 决策树
  • MySQL的innoDB存储引擎如何解决幻读的问题?
  • Web3.0:重新定义互联网的未来
  • 2023年还能选择前端吗?
  • sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式
  • Redis 报错 RedisConnectionException: Unable to connect to x.x.x.x:6379
  • Stable Diffusion - 真人照片的高清修复 (StableSR + GFPGAN) 最佳实践
  • 细讲一个 TCP 连接能发多少个 HTTP 请求(一)
  • 了解 CVSS:通用漏洞评分系统的应用
  • Xilinx FPGA电源设计与注意事项
  • 前端:地图篇(一)
  • 刷题笔记 day6
  • Drools用户手册翻译——第四章 Drools规则引擎(十一)复杂事件处理(CEP)的属性更改设置和监听器
  • [数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北
  • 基于SpringBoot+Vue的MOBA类游戏攻略分享平台设计与实现(源码+LW+部署文档等)
  • Linux sed 命令详解
  • 算法通关村——如何使用中序和后序来恢复一棵二叉树