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

【C++】set与map

目录

一、键值对

二、set

1. set的模板参数列表

2. set的构造

3. set的迭代器

4. set的容量

5. set的修改

6. set的查找

三、map

 1. map的模板参数列表

2. map的构造

3. map的迭代器

4. map的容量

5. map的修改

6. map的查找


一、键值对

用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代 表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然 有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应 该单词,在词典中就可以找到与其对应的中文含义。

SGI-STL中关于键值对的定义:

template <class T1, class T2>struct pair 
{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): first(T1()), second(T2()){}pair(const T1& a, const T2& b): first(a), second(b){}};

 

二、set

  • set是按照一定次序存储元素的容器
  • 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。 set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
  • 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。
  • set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。
  • set在底层是用二叉搜索树(红黑树)实现的。

 

1. set的模板参数列表

T: set中存放元素的类型,实际在底层存储的键值对。

Compare:set中元素默认按照小于来比较

Alloc:set中元素空间的管理方式,使用STL提供的空间配置器管理  

2. set的构造

3. set的迭代器

 

4. set的容量

5. set的修改

6. set的查找

 

三、map

  • map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元 素。
  • 在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的 内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型 value_type绑定在一起,为其取别名称为pair: typedef pair value_type;
  • 在内部,map中的元素总是按照键值key进行比较排序的。
  • map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序 对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
  • map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
  • map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树))。

 

 1. map的模板参数列表

key: 键值对中key的类型

T: 键值对中value的类型

Compare: 比较器的类型,map中的元素是按照key来比较的,缺省情况下按照小于来比较,一般情况下(内置类型元素)该参数不需要传递,如果无法比较时(自定义类型),需要用户自己显式传递比较规则(一般情况下按照函数指针或者仿函数来传递)

Alloc:通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的 空间配置器

2. map的构造

 

3. map的迭代器

4. map的容量

5. map的修改

6. map的查找

相关文章:

  • 结合Django和Vue.js构建现代Web应用
  • Java程序员的AI框架,它带着Spring走来啦
  • Java面向数据编程1.1版本
  • C#_类型转换之隐式转换
  • 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  • Lvm逻辑卷调整容量
  • 2024电激世界脉动-中国汽车品牌全球化制胜手册
  • M00238-固定翼无人机集群飞行仿真平台MATLAB完整代码含效果
  • 整理前端新出的操作工具好用又好玩(Custom Formatter,Oxlint,Nuxt DevTools,component-party)
  • 机器学习过拟合和欠拟合!看这一篇文章就够了 建议收藏!(上篇)
  • 备战秋招c++ 【持续更新】
  • huggingface笔记 accelerate launch
  • 学习编程对英语要求高吗?
  • FreeBSD下使用原生虚拟机管理器bhyve
  • KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去
  • 0x05 Python数据分析,Anaconda八斩刀
  • angular2开源库收集
  • Facebook AccountKit 接入的坑点
  • FineReport中如何实现自动滚屏效果
  • go append函数以及写入
  • GraphQL学习过程应该是这样的
  • leetcode-27. Remove Element
  • Python - 闭包Closure
  • spark本地环境的搭建到运行第一个spark程序
  • SQLServer之创建显式事务
  • ViewService——一种保证客户端与服务端同步的方法
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 聊一聊前端的监控
  • 排序(1):冒泡排序
  • 排序算法之--选择排序
  • 前端_面试
  • 在Mac OS X上安装 Ruby运行环境
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • "无招胜有招"nbsp;史上最全的互…
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #pragam once 和 #ifndef 预编译头
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (7)摄像机和云台
  • (第二周)效能测试
  • (多级缓存)多级缓存
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转) ns2/nam与nam实现相关的文件
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .CSS-hover 的解释
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NetCore 如何动态路由
  • .NET基础篇——反射的奥妙