【C++】STL 容器 - map 关联容器 ① ( std::map 容器简介 | std::map 容器排序规则 | std::map 容器底层实现 )

文章目录

  • 一、std::map 容器
    • 1、std::map 容器简介
    • 2、std::map 容器排序规则
    • 3、std::map 容器底层实现
  • 二、代码示例 - std::map 容器
    • 1、代码示例
    • 2、执行结果






一、std::map 容器



1、std::map 容器简介


std::map 容器C++ 语言 标准模板库 ( STL , Standard Template Library ) 提供的 的一个 " 关联容器 " ;

std::map 关联容器 , 提供 一对一数据处理能力 , 容器中的元素自动按键 Key 排序 , 键 Key 和 值 Value 是 一一对应 的 ;

  • 第一个 键 Key 可以称为 关键字 , 每个 关键字 只能在 map 中出现一次 ;
  • 第二个 是 关键字的 值 Value ;

std::map 容器 中 存储的是 键值对 key-value 数据 , 容器中的元素是 键 Key 对 元素 进行自动排序 的 ;

每个键的值在 std::map 容器中都是 唯一的 , 键值不允许重复 ;

在 std::map 容器 中 , 可以 根据 键 Key 快速检索 容器中的 对应 值 Value ;


std::map 容器 的 大小 是 动态调整的 , 在 运行时 增加 / 删除 键值对元素 , 其大小也随之变化 ;


使用 map 集合之前 , 需要导入 <map> 头文件 ;

#include "map"

2、std::map 容器排序规则


std::map 容器 中 , 排序规则如下 :

  • 默认排序规则 : 默认的排序规则是 less 仿函数规则 , 即按照 键 的升序进行排列 ;
  • less 仿函数运算 : 在该仿函数中 核心操作就是 调用 元素的 < 运算符 , 如果该元素类型没有重载 < 运算符 , 则会报错 ;
  • 自定义排序规则 : 如果想要自己设置排序规则 , 则 自定义 仿函数 / 函数对象 即可 ;

map 容器必须制定排序规则 , 默认就是 less 排序规则 , 使用该规则的前提是 元素类型可以使用 < 操作符进行运算 , 如果不能进行 < 运算 , 则必须传入一个排序规则 ;


3、std::map 容器底层实现


std::map 容器 底层使用 红黑树 实现 , 这是 平衡二叉树 的变体 数据结构 ;

std::map 容器 与 std::set 容器 底层实现相同 , 区别是 map 容器中存储的是键值对 , set 容器中存储的事单个元素值 ;

使用 红黑树 实现的 std::map 容器 和 std::set 容器 , 其 插入 / 删除 操作 比 线性表 性能要高 ;

  • 线性表 的 插入 / 删除 操作 , 时间复杂度是 O(n) ;
  • 红黑树 的 插入 / 删除 操作 , 时间复杂度是 O(log n) ;




二、代码示例 - std::map 容器



1、代码示例


#include "iostream"
using namespace std;
#include "map"
#include "string"int main() {// 创建一个空的 map 容器,键为 string 类型,值为 int 类型map<string, int> myMap;   myMap["Tom"] = 18;                // 插入键值对 ("Tom", 18)  myMap["Jerry"] = 12;              // 插入键值对 ("Jerry", 12)  myMap["Trump"] = 80;              // 插入键值对 ("Trump", 80)  // 遍历 map 中的所有元素  for (const auto& pair : myMap) {cout << pair.first << ": " << pair.second << endl;  }// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};

2、执行结果


执行结果 :

Jerry: 12
Tom: 18
Trump: 80
请按任意键继续. . .

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式技术之数据复制技术

文章目录 什么是数据复制技术&#xff1f;数据复制技术原理及应用同步复制技术原理及应用异步复制技术原理及应用半同步复制技术原理及应用三种数据复制技术对比 什么是数据复制技术&#xff1f; 数据复制是一种实现数据备份的技术。数据复制技术&#xff0c;可以保证存储在不…

Plantuml之甘特图语法介绍(二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

基于SpringBoot的在线远程考试系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的在线远程考试系统,java…

磁盘和文件系统管理

一&#xff1a;磁盘结构&#xff1a; 1.磁盘基础&#xff1a; 扇区固定大小&#xff0c;每个扇区4k。磁盘会进行磨损&#xff0c;损失生命周期。 设备文件&#xff1a; 一切皆文件 设备文件&#xff1a;关联至一个设备驱动程序&#xff0c;进而能够跟与之对应硬件设备进行通…

UDP发送和接受数据

发送数据 public class sendmessage {public static void main (String[] args) throws IOException {DatagramSocket dsnew DatagramSocket();//打包数据开始String s"hello world";byte[] bs.getBytes();//获取InetAddress的对象InetAddress addressInetAddress.g…

什么是IDE?新手用哪个IDE比较

IDE代表集成开发环境&#xff08;Integrated Development Environment&#xff09;&#xff0c;它是一种软件应用程序&#xff0c;提供了一套工具&#xff0c;用于编写、调试和运行软件程序。一个IDE通常包含代码编辑器、编译器、调试器和其他各种工具&#xff0c;以便开发人员…

Rust学习笔记000 安装

安装命令 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh info: downloading installerWelcome to Rust!This will download and install the official compiler for the Rust programming la…

【基础】【Python网络爬虫】【3.chrome 开发者工具】(详细笔记)

Python网络爬虫基础 chrome 开发者工具元素面板&#xff08;Elements)控制台面板&#xff08;Console&#xff09;资源面板&#xff08;Source&#xff09;网络面板&#xff08;Network&#xff09;工具栏Requests Table详情 chrome 开发者工具 ​ 当我们爬取不同的网站是&…

MATLAB常用笔记记录(持续更新)

3.错误使用 reshape 元素数不能更改。请使用 [] 作为大小输入之一&#xff0c;以自动计算该维度的适当大小。 仔细检查之后发现原因是&#xff1a;两个栅格图层的行列数不一致。解决办法如下&#xff1a; 先改变栅格图层1源文件的投影坐标系&#xff0c;再进行掩膜提取&#x…

Linux环境安装2

1 redis单机版安装 1.1 安装 wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -xzvf tcl8.6.1-src.tar.gz cd /usr/local/tcl8.6.1/unix/ ./configure make && make install使用redis-3.2.8.tar.gz&#xff08;截止2017年4月的最新稳定版&…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】点云配准

目录 几个相关概念 算法原理 什么是点云 点云的处理 ICP 算法 1 问题描述

常用CSS样式

目录 1、文本超出省略号代替 2、自定义滚动条样式 3、文本无法选中 4、字体间距 5、放大动画效果 6、CSS引用数字字体 7、CSS去角 8、CSS :after、:before、::after、::before的使用 9、CSS使用::after去除浮动 10、时间动画属性 transition 11、颜色渐变 12、解决…

javaWeb学生信息管理系统2

一、学生信息管理系统SIMS 一款基于纯Servlet技术开发的学生信息管理系统&#xff08;SIMS&#xff09;&#xff0c;在设计中没有采用SpringMVC和Spring Boot等框架。系统完全依赖于Servlet来处理HTTP请求和管理学生信息&#xff0c;实现了信息的有效存储、检索和更新&#xf…

React16源码: Component与PureComponent源码实现

概述 Component 就是组件, 这个概念依托于最直观的在react上的一个表现&#xff0c;那就是 React.Component我们写的组件大都是继承于 React.Component 这个baseClass 而写的类这个类代表着我们使用 react 去实现的一个组件那么在react当中不仅仅只有 Component 这一个baseCla…

【web安全】登录界面渗透的思路总结

前言 小菜作者的总结。 如果大家知道其他的安全问题&#xff0c;欢迎大家补充赐教。我们一起完善登录页面的渗透思路。 &#xff08;如果大家有好的博客讲解对应的漏洞&#xff0c;欢迎分享~&#xff09; sql注入 登录页面是需要与数据库打交道的。是需要带入数据库查询的…

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo&#xff08;Configuration Info for Java&#xff09;的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表&#xff0c;但是如果想知道未被显示指定的参数的系统默认值&#xff0c;除 …

GCP 创建1个windows vm 并连接

有时需要临时使用1台windows 的机器 创建windows vm 既然是临时 直接用gcloud command gcloud compute instances create instance-windows \--zoneeurope-west2-c \--machine-typen2d-standard-4 \--boot-disk-size100GB \--image-projectwindows-cloud \--imagewindows-se…

Rust学习笔记001:HELLOW WORLD + Cargo

Rust介绍 Rust&#xff08;中文称为“锈”&#xff09;是一种由Mozilla开发的系统编程语言&#xff0c;它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题&#xff0c;如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来…

Vue(三):Vue 生命周期与工程化开发

2023 的最后一篇博客&#xff0c;祝大家元旦快乐&#xff0c;新的一年一起共勉&#xff01; 06. Vue 生命周期 6.1 基本介绍 生命周期就是一个 Vue 示例从 创建 到 销毁 的整个过程&#xff0c;创建、挂载、更新、销毁 有一些请求是必须在某个阶段完成之后或者某个阶段之前执行…

10TB海量JSON数据从OSS迁移至MaxCompute

前提条件 开通MaxCompute。 在DataWorks上完成创建业务流程&#xff0c;本例使用DataWorks简单模式。详情请参见创建业务流程。 将JSON文件重命名为后缀为.txt的文件&#xff0c;并上传至OSS。本文中OSS Bucket地域为华东2&#xff08;上海&#xff09;。示例文件如下。 {&qu…