C++进阶学习:STL常用容器--map/multimap容器

1. map 容器基本概念

map 中所有元素都是 pair

pair 中第一个元素为 key (键值) 起到索引运用  第二个元素为 value(实值)

所有元素都会根据元素的键值自动排序

本质:

  map/multimap 属于关联式容器  底层结构是用二叉树实现

优点:

  可以根据 key 值快速找到 value 值

map 和 multimap 的区别:

  map 中不允许有重复的key值

  multimap 中允许有重复的key值

2. map 构造和赋值

功能描述:

对 map 容器进行构造和赋值操作

map 容器中所有数据都是成对出现的  插入时要使用对组

代码示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//set 容器排序void printMap(map<int, int>& m)
{for (map<int, int>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}void test01()
{//创建 map 容器map<int, int> m;m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));printMap(m);  //按照 key 值自动排序//拷贝构造map<int, int>m2(m);printMap(m2);//赋值map<int, int>m3;m3 = m2;printMap(m3);
}int main()
{test01();system("pause");return 0;
}

3. map 大小和交换

功能描述:

统计 map 容器大小以及交换 map 容器

代码示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//set 容器排序void printMap(map<int, int>& m)
{for (map<int, int>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}void test01()
{map<int, int> m;m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));if (m.empty()){cout << "m 为空" << endl;}else{cout << "m 不为空" << endl;;cout << "m 的大小为:" << m.size() << endl;  //4}}void test02()
{map<int, int> m1;m1.insert(pair<int, int>(3, 30));m1.insert(pair<int, int>(4, 40));m1.insert(pair<int, int>(1, 10));m1.insert(pair<int, int>(2, 20));map<int, int> m2;m2.insert(pair<int, int>(5, 50));m2.insert(pair<int, int>(6, 60));m2.insert(pair<int, int>(7, 70));m2.insert(pair<int, int>(8, 80));cout << "交换前" << endl;printMap(m1);printMap(m2);m1.swap(m2);cout << "交换后" << endl;printMap(m1);printMap(m2);
}int main()
{test01();test02();system("pause");return 0;
}

4. map 插入和删除

功能描述:

map 容器进行数据的插入和删除操作

代码示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和删除void printMap(map<int, int>& m)
{for (map<int, int>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}void test01()
{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;//[]不建议插入  但可以利用key访问到value//cout<<map[4]<<endl;printMap(m);//删除m.erase(m.begin());printMap(m);m.erase(3);  //按照 key 删除printMap(m);m.erase(m.begin(), m.end());printMap(m);m.clear();printMap(m);
}int main()
{test01();system("pause");return 0;
}

5. map 查找和统计

功能描述:

对 map 容器进行查找和统计操作

查找  --  find()  返回的是一个迭代器

统计  --  count()  对于map容器  结果为0或1

代码示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和删除void printMap(map<int, int>& m)
{for (map<int, int>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}void test01()
{//查找map<int,int> m;m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));map<int, int>::iterator pos = m.find(3);if (pos != m.end()){cout << "找到了元素:" << pos->first << " value = " << pos->second << endl;}else {cout << "没有找到" << endl;}//统计int num = m.count(3);  //map 不允许插入重复key元素,所以统计结果只有0或1cout << "num = " << num << endl;  //1
}int main()
{test01();system("pause");return 0;
}

6. map 容器排序

功能描述:

对 map 容器中的元素进行排序

利用仿函数可以指定 map 容器的排序规则

对于自定义数据类型  map 容器必须指定排序规则

代码示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和删除class MyCompare 
{
public:bool operator()(int v1, int v2) const{//降序return v1 > v2;}
};void test01()
{map<int, int,MyCompare> m;m.insert(make_pair(1, 10));m.insert(make_pair(2, 20));m.insert(make_pair(3, 30));m.insert(make_pair(4, 40));m.insert(make_pair(5, 50));for (map<int, int,MyCompare>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}int main()
{test01();system("pause");return 0;
}

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

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

相关文章

let,const,var关键字的区别

let,const,var关键字 let&#xff0c;const&#xff0c;var都存在变量提升 它们都存在变量提升但是稍微有点不同 var变量声明会被提升到作用域的顶部&#xff0c;并且会被初始化为 undefinedlet 和 const&#xff1a;变量声明也会被提升到作用域的顶部&#xff0c;但不会被初…

Nuitka 已经不再安全? Nuitka/Cython 打包应用逆向工具 -- pymodhook

pymodhook是一个记录任意对Python模块的调用的库&#xff0c;用于Python逆向分析。 pymodhook库类似于Android的xposed框架&#xff0c;但不仅能记录函数的调用参数和返回值&#xff0c;还能记录模块的类的任意方法调用&#xff0c;以及任意派生对象的访问&#xff0c;基于pyob…

path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2

要正确设置 Path1 的值&#xff0c;你需要将现有的 PATH 环境变量 中的部分路径复制到 Path1 和 Path2 中。以下是详细步骤&#xff1a; 步骤 1&#xff1a;获取当前 PATH 的值 打开环境变量窗口&#xff1a; 按 Win R&#xff0c;输入 sysdm.cpl&#xff0c;点击 确定。在 系…

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)

1 目的 物料(例如晶圆)加工在设备中的自动化管理与控制是实现工厂自动化的关键要素。本标准针对半导体制造环境中与设备内部物料处理相关的通信需求进行了规范。本标准规定了在加工单元接收到的指定材料所应适用的加工方法(例如Etch腔室需要Run哪支Recipe)。它阐述了物料加工的…

【Hadoop】集群搭建实战:超详细保姆级教程

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop集群概念 3、 Hadoop 集…

阿里云人工智能大模型通义千问Qwen3开发部署

本文主要描述阿里云人工智能大模型开源社区ModelScope提供的通义千问Qwen3开发部署。 与阿里云一起 轻松实现数智化 让算力成为公共服务&#xff1a;用大规模的通用计算&#xff0c;帮助客户做从前不能做的事情&#xff0c;做从前做不到的规模。让数据成为生产资料&#xff1a;…

24.(vue3.x+vite)引入组件并动态挂载(mount)

示例截图 组件代码: <template><div><div>{{message }}</div>

《Python星球日记》 第56天:循环神经网络(RNN)入门

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、序列数据的特点与挑战1. 什么是序列数据?2. 序列数据的挑战二、RNN 的基本结构与前向传播1. RNN的核心理念2. RNN的数学表达3. RNN的前向传…

手写 vue 源码 === computed 实现

目录 计算属性的基本概念 计算属性的核心实现 ComputedRefImpl 类的实现 ReactiveEffect 与计算属性的关系 计算属性的工作流程 1. 创建计算属性 2. 依赖收集过程 3. 嵌套 effect 的处理 4. 更新过程 嵌套 effect 关系图解 依赖关系建立过程 代码实现分析 1. 创建…

【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决

在Vivado中在always块中写逻辑时如果出现always块中的异步复位敏感词在块内部未使用的情况&#xff0c;如下例的rst&#xff1a; always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…

【hadoop】Sqoop数据迁移工具的安装部署

一、Sqoop安装与配置 步骤&#xff1a; 1、使用XFTP将Sqoop安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz发送到master机器的主目录。 2、解压安装包&#xff1a; tar -zxvf ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 3、修改文件夹的名字&#xff0c;将其改为s…

BUUCTF——PYWebsite

BUUCTF——PYWebsite 进入靶场 看看基本信息 没有什么信息 扫个目录看看 http://node5.buuoj.cn:28115/.DS_Store http://node5.buuoj.cn:28115/flag.php http://node5.buuoj.cn:28115/index.html访问flag.php 提示保存购买者的IP 抓包看看 直接XFF伪造一下 X-Forwarded-F…

基于Qt开发的多线程TCP服务端

目录 一、Qt TCP服务端开发环境准备1. 项目配置2. 核心类说明二、服务端搭建步骤详解步骤1:初始化服务端对象步骤2:启动端口监听步骤3:处理客户端连接三、数据通信与状态管理1. 数据收发实现2. 客户端状态监控四、进阶功能扩展1. 多客户端并发处理2. 心跳检测机制五、调试与…

【Tools】VScode使用CMake构建项目

这里写目录标题 vscode 使用 CMake**安装插件**新建CMake项目 vscode 使用 CMake 安装插件 CMake和CMake Tools c等等 CMake插件主要功能是CMake语法高亮、自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具&#xff0c;比如生成CMake项目、构建CMake项目等…

neo4j图数据库基本概念和向量使用

一.节点 1.新建节点 create (n:GroupProduct {name:都邦高保额团意险,description: "保险产品名称"} ) return n CREATE&#xff1a;Neo4j 的关键字&#xff0c;用于创建新节点或关系。 (n:GroupProduct)&#xff1a; n 是节点的临时别名&#xff08;变量名&#…

2025年渗透测试面试题总结-渗透测试红队面试八(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试八 二百一十一、常见中间件解析漏洞利用方式 二百一十二、MySQL用户密码存储与加密 …

大语言模型主流架构解析:从 Transformer 到 GPT、BERT

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…

Java设计模式之装饰器模式:从基础到高级的全面解析(万字解析)

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 一、装饰器模式基础概念 1.1 什么是装饰器模式 装饰…

RN 鸿蒙混合开发实践(踩坑)

#三方框架# #React Native # 1 。环境配置&#xff1b; 安装 DevEco 开发工具&#xff1b; Node 版本16&#xff1b; hdc环境配置 hdc 是 OpenHarmony 为开发人员提供的用于调试的命令行工具&#xff0c;鸿蒙 React Native 工程使用 hdc 进行真机调试。hdc 工具通过 OpenHa…

动态网站 LNMP

一、名词解释&#xff1a; LNMP&#xff1a; L : 代表 Linux 操作系统&#xff0c;为网站提供了可靠的运行环境N : 代表 Nginx&#xff0c;它是一款轻量级的高性能 Web 服务器&#xff0c;能够快速处理大量并 发连接&#xff0c;有效提升网站的访问速度和性能 M : 代表…