(二十九)STL map容器(映射)与STL pair容器(值对)

embedded/2024/9/19 5:20:23/ 标签: c++, 开发语言

C++中的map容器是什么?可以说这个是python中的字典(dict

T = {'1':5, '3':7, '5':4, '4':9, '2':6} print(T)

学过python的都知道字典的每一项都有一个键(key)和一个值(value),而且键是不能重复的

在C++还有一个特点:可以自排序

那值对pair又是个什么东西呢?一个pair可以存储两个数据,这是他的定义:

template<class _T1, class _T2>
struct pair 
{ ..._T1 first; _T2 second; ...
}

在这里_T1指第一项的类型,_T2指第二项的类型,因此first指第一项的值,second指第二项的值

map中的每一项都有一个值对pair,因此mappair有很大的关系。我们可以说“pair是只有一项的mapmap是有多项的pair

mappair的定义和vectorset一样,需要这两个得导入头文件#include <map>

map<Typ1, Typ2> T; //定义一个map容器T,它的键的类型是Typ1,值的类型是Typ2
pair<Typ1, Typ2> P; //定义一个pair容器P,first的类型是Typ1,second的类型是Typ2

想要制作一个值对,可以使用make_pair()函数

make_pair(first, second) //返回一个第一项为first,第二项为second的值对

这些是map容器中的一些函数:

  1. T.insert(x):x为一个值对,这个代码表示添加一个新项x(如果存在x.first则无事发生)
  2. T.erase(x):如果T中确实存在x这个键,那么删除它,否则无事发生
  3. T.erase(it):如果T中确实存在it这个有效迭代器,那么删除迭代器的内容,否则运行错误
  4. T[x]:返回T中键为x的那一项的值(未存在返回0)
  5. T.find(x):如果存在键x,返回它存在的迭代器,否则返回T.end()(类型map::iterator
  6. T.count(x):如果存在键x,返回1,否则返回0(返回类型size_t
  7. T.size():返回T的大小
  8. T.capacity():返回T占用的大小(T.erase()函数没有真正的删除,只是把它标记成了nullptr,所以这里的删除仍然在占用空间)
  9. T.begin():返回T的首元素迭代器
  10. T.end():返回T的末尾截止元素迭代器

这些是pair容器中的一些函数:

  1. P.first:返回P的第一个元素
  2. P.second:返回P的第二个元素
  3. Pit->first:返回地址为Pit的值对的第一项
  4. Pit->second:返回地址为Pit的值对的第二项

如果需要用迭代器遍历map容器,可以使用类型map<类型1, 类型2>::iterator

for(map<Typ1, Typ2>::iterator it = T.begin(); it != T.end(); it ++)cout << it->first << ':' << it->second << endl; 

因为map的每一项都是pair,所以可以使用迭代器->first来获取某项的键,用迭代器->second来获取某项的值

一样的,map也支持foreach循环

for(auto it: T)cout << it.first << ':' << it.second << endl; 

注意,foreach每项返回的不是迭代器

map容器可以自自定义排序方法,和set容器的方法一样,重载()

struct cmp {bool operator() (int a, int b) const //增加const后可以增加防御性{ return a > b; }
}; 
map<int,int,cmp> T; 

这种使用结构体来包装重载运算的方法叫做伪函数(functor)

如果不想让它排序呢?聪明点,定义一个vector数组

vector<pair<类型前, 类型后>> T; 

只不过用法就变了,例如insert()变身push_back(),访问元素还要依次查询

预览:

  • 二十二:类(class)
  • 二十三:高精度运算
  • 二十四:算法进阶
  • 二十五:递归
  • 二十六:vector容器
  • 二十七:递推
  • 二十八:set容器
  • 二十九:map容器
  • 三十:二分查找(Binary Search, BS
  • 三十一:前缀和与差分
  • 三十二:栈(stack
  • 三十三:队列(queue)和双向队列(deque
  • 三十四:电脑基础知识
  • 三十五:链表
  • 三十六:树
  • 三十七:图
  • 三十八:预处理命令

http://www.ppmy.cn/embedded/107332.html

相关文章

vue 踩坑记录

本地开发没有cookie 解决方案 设置代理&#xff0c;并把changeOrigin设为true proxy的changeOrigin如果设置为false&#xff1a;请求头中host仍然是浏览器发送过来的host&#xff1b; 如果设置成true&#xff1a;发送请求头中host会设置成target。 允许axios请求携带cookie等凭…

Linux字符设备驱动 -- regulator子系统

文章目录 环境regulator子系统简介&#xff1a;Regulator设备的注册Consumer设备的注册 环境 linux 4.9 armv8-A regulator子系统简介&#xff1a; 关于regulator子系统&#xff0c;可以看下这这些博客&#xff1a; Linux驱动之Regulator子系统Linux 内核之电源篇(加载流程…

乐鑫ESP-HMI方案人机交互,设备彩屏显示新体验,启明云端乐鑫代理商

在数字化浪潮的推动下&#xff0c;人机交互的方式正在经历一场深刻的变革。用户对于智能设备的需求不再局限于基本的功能操作&#xff0c;而是期望能够通过更加直观、自然的方式与设备进行交流。 这种需求催生了一系列创新的芯片方案&#xff0c;它们通过集成高性能的计算核心…

MacOS通过Docker部署安装zookeeper、dubbo-admin,以及Docker Desktop进行管理

1.建立一个网络桥接zk docker network create -d bridge zk我们通过docker安装dubbo-admin和zookeeper,为了保证他们能够正常通信,需要使用同一个网络 2.创建zookeeper的docker卷 docker volume create zookeeper_data 3.启动zookeeper,并指定网络和卷 docker run -d \--n…

WS2812B驱动

#include "stm32f10x.h" #include "TIM2.h" #include "DMA1.h"//#define WS2812B_LED_QUANTITY 32 //灯珠数量 #define WS2812B_LED_QUANTITY 12 //灯珠数量//定义数组 类型符 数组名[常量] uint32_t WS2812B_Buf[WS2812B_LED_QUANTITY]; //0xG…

charles 使用踩坑记录

问题记录 charles不同的版本会有不同的问题&#xff0c;最新版本抓取手机包的时候&#xff0c;手机无法下载证书&#xff0c;暂未找到解决办法抓取手机包的时候ssl代理开启之后&#xff0c;必须还要在对应下方的规则里配置&#xff0c;否则则认为没有开启ssl代理设置在charles…

OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址 6. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可…

NGINX 中配置负载均衡器

Nginx 提供了多种负载均衡策略&#xff0c;如轮询&#xff08;Round Robin&#xff09;、最少连接数&#xff08;Least Connections&#xff09;、IP 哈希&#xff08;IP Hash&#xff09;等。这里以轮询策略为例进行配置。 1. 准备工作 假设你有以下几台 PHP 服务器&#xf…

【Motion Forecasting】SIMPL:简单且高效的自动驾驶运动预测Baseline

SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving 这项工作发布于2024年&#xff0c;前一段时间我已经对这篇文章的摘要和结论进行了学习和总结&#xff0c;这一部分详见https://blog.csdn.net/Coffeemaker88/article/details/1…

公寓项目(尚庭公寓笔记)

公寓项目 课程介绍项目概述移动端业务功能后台管理系统业务功能-公寓管理后台管理系统业务功能-租赁功能后台管理系统业务功能-系统管理&用户管理核心业务功能技术概述 项目开发流程项目原型数据库设计理论ER模型数据库设计流程 数据库设计实操概念模型逻辑模型公寓信息房间…

Windows中jupyter开启远程连接(局域网)

我是用实验室的电脑&#xff08;做服务器&#xff0c;window&#xff09;给我的电脑&#xff08;做客户机&#xff0c;window&#xff09;开远程连接&#xff0c;step1-4都是在服务器上操作&#xff0c;step5是在客户机上 step1&#xff1a;生成密钥 服务器cmd输入 jupyter n…

一种极简的余弦定理证明方法

余弦定理的证明方法有很多种&#xff0c;这里介绍一种极简的证明方法。该方法是本人在工作中推导公式&#xff0c;无意中发现的。证明非常简单&#xff0c;下面简单做下记录。   如上图为任意三角形ABC&#xff0c;以点C为原点&#xff0c;建立直角坐标系&#xff08;x轴方向…

基于 TiDB 资源管控 + TiCDC 实现多业务融合容灾测试

导读 随着金融行业的不断发展&#xff0c;多个业务系统的整合成为了趋势&#xff0c;分布式数据库的应用也愈发广泛。为了应对多业务融合带来的复杂性&#xff0c;金融机构需要在保障各业务系统高效运行的同时&#xff0c;确保 IT 系统的高可用性和稳定性。本文将介绍 TiDB 如…

【区块链 + 房产建筑】区块链不动产登记系统 | FISCO BCOS应用案例

武汉链动时代科技有限公司基于 FISCO BCOS 搭建区块链不动产登记系统&#xff0c;利用区块链技术存储不动产数据&#xff0c;保障数据安全&#xff0c;并实时汇交。 系统对入链数据和交易情况进行实时监控&#xff0c;支持数据的共享查询。

SpringBoot2.7 + Nacos + GateWay

1. pom包&#xff0c;主要是记录版本 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

Java SpringBoot构建传统文化网,三步实现信息展示,传承文化精髓

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

ElasticSearch-ELK

Logstash Logstash 配置文件结构Logstash 导入数据到 ES同步数据库数据到 ES FileBeatELK&#xff08;采集 Tomcat 服务器日志&#xff09; 使用FileBeats将日志发送到LogstashLogstash输出数据到Elasticsearch&#xff08;logstash开头的索引&#xff09; 利用Logstash过滤器解…

Jsoncpp的安装与使用

目录 安装Jsoncpp Jsoncpp的使用 Value类 构造函数 检测保存的数据类型 提取数据 对json数组的操作 对Json对象的操作 FastWriter类 Reader类 JsonCpp 是一个C库&#xff0c;用于解析和生成JSON数据。它支持解析JSON文件或字符串到C对象&#xff0c;以及将C对象序列…

Java 面向对象编程基础详解(一)

目录 一、面向对象编程概述 &#xff08;一&#xff09;面向对象编程的特点 &#xff08;二&#xff09;Java 中的面向对象编程元素 二、类和对象 &#xff08;一&#xff09;类的设计 &#xff08;二&#xff09;类的实例化 &#xff08;三&#xff09;面向对象完成具体…

GAMES104:10+11游戏引擎中物理系统的基础理论算法和高级应用-学习笔记

文章目录 概览一&#xff0c;物理对象与形状1.1 对象 Actor1.2 对象形状Actor Shape 二&#xff0c;力与运动2.1 牛顿定律2.2 欧拉法2.2.1 显式欧拉法Explicit (Forward) Euler’s Method2.2.2 隐式欧拉法 Implicit (Backward) Euler’s Method2.2.3 半隐式欧拉法 Semi-implici…