c++ map/multimap容器 学习笔记
1 map的基本概念
简介:
map中所有的元素都是pair
pair中第一个元素是key(键),第二个元素是value(值)
所有元素都会根据元素的键值自动排序。
本质:
map/multimap 属于关联式容器,底层是用红黑树实现。
优点:
可以根据key值快速查找数据
map 和multimap 的区别:
map不允许key重复,而multimap允许key重复
2 map的构造和赋值
构造函数
map<T1, T2> mapT; // 默认构造函数
map(const map &st); // 拷贝构造函数
赋值
map& operator=(const map &st); // 重载等号操作符
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;// map的构造和赋值void printMap(map<string,int> &m) {for(map<string,int>::iterator it = m.begin();it!=m.end();it++) {cout << "姓名:" << it->first << " 年龄:" << it->second << endl;}cout << endl;
}void test01() {map<string,int> m;m.insert(pair<string,int>("貂蝉",18));m.insert(pair<string,int>("小乔",19));m.insert(pair<string,int>("孙尚香",17));m.insert(pair<string,int>("甄姬",16));m.insert(pair<string,int>("西施",20));printMap(m);// 拷贝构造函数map<string,int> m2(m);printMap(m2);// 赋值操作map<string,int> m3;m3 = m;printMap(m3);}int main(int argc, char const *argv[]) {test01();return 0;
}
3. map 大小和交换
函数原型:
size(); // 返回 map 中元素的个数
empty(); // 判断 map 是否为空
swap(map x); // 将 x 和当前 map 中的元素进行互换
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;// map 大小和交换void printMap(map<string,int> &m) {for(map<string,int>::iterator it = m.begin();it!=m.end();it++) {cout << "姓名:" << it->first << " 年龄:" << it->second << endl;}cout << endl;
}void test01() {map<string,int> m;m.insert(pair<string,int>("貂蝉",18));m.insert(pair<string,int>("小乔",19));m.insert(pair<string,int>("孙尚香",17));m.insert(pair<string,int>("甄姬",16));m.insert(pair<string,int>("西施",20));cout << "map 大小:" << m.size() << endl;if (m.empty()){cout << "map 为空" << endl;}else{cout << "map 不为空" << endl;}map<string,int> m2;m2.insert(pair<string,int>("妲己",21));m2.insert(pair<string,int>("王昭君",20));m2.insert(pair<string,int>("杨玉环",18));cout << "交换前:" << endl;printMap(m);printMap(m2);cout << "交换后:" << endl;m.swap(m2);printMap(m);printMap(m2);
}int main(int argc, char const *argv[]) {test01();return 0;
}
4.map 插入和删除
函数原型:
inserrt(elem) // 在容器中插入元素
clear() // 删除所有元素
erase(pos) // 删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end) // 删除迭代器从beg到end的所有元素
erase(key) // 删除key所指的元素
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;// map 插入和删除void printMap(map<string,int> &m) {for(map<string,int>::iterator it = m.begin();it!=m.end();it++) {cout << "姓名:" << it->first << " 年龄:" << it->second << endl;}cout << endl;
}void test01() {map<string,int> m;// 第一种插入方式m.insert(pair<string,int>("貂蝉",18));// 第二种插入方式m.insert(make_pair("小乔",19));// 第三种插入方式m.insert(map<string,int>::value_type("孙尚香",17));// 第四种插入方式m["甄姬"] = 16;m.insert(pair<string,int>("西施",20));// []不建议插入,如果key存在,则修改value,如果key不存在,则插入pair// 可以用[]来访问valuecout << m["甄姬"] << endl;printMap(m);// 删除m.erase(m.begin());printMap(m);m.erase("甄姬"); // 删除key为甄姬的元素printMap(m);m.erase(m.begin(),m.end()); // 删除迭代器区间[begin,end)的元素 相当于清空printMap(m);}int main(int argc, char const *argv[]) {test01();return 0;
}
5. map查找和统计
函数原型:
map<T1,T2>::find(key); // 查找key,如果查到,返回该键的元素的迭代器;如果查不到,返回map.end();
map<T1,T2>::count(key); // 查找key,如果查到,返回1;如果查不到,返回0;
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;// map查找和统计void printMap(map<string,int> &m) {for(map<string,int>::iterator it = m.begin();it!=m.end();it++) {cout << "姓名:" << it->first << " 年龄:" << it->second << endl;}cout << endl;
}void test01() {map<string,int> m;// 第一种插入方式m.insert(pair<string,int>("貂蝉",18));// 第二种插入方式m.insert(make_pair("小乔",19));// 第三种插入方式m.insert(map<string,int>::value_type("孙尚香",17));// 第四种插入方式m["甄姬"] = 16;m.insert(pair<string,int>("西施",20));map<string,int>::iterator pos = m.find("小乔");if(pos != m.end()) {cout << "找到了小乔,年龄为:" << pos->second << endl;}else {cout << "未找到小乔" << endl;}cout << "num " << m.count("小乔") << endl;}int main(int argc, char const *argv[]) {test01();return 0;
}
6. map容器的排序
利用防函数可以改变排序规则
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;// map容器的排序class MyCompare {
public:bool operator()(int v1,int v2) const {return v1 > v2;}
};void printMap(map<int,string,MyCompare> &m) {for(map<int,string,MyCompare>::iterator it = m.begin();it!=m.end();it++) {cout << "id: " << it->first << " 名字: " << it->second << endl;}cout << endl;
}void test01() {map<int,string,MyCompare> m;m.insert(make_pair(1,"西施"));m.insert(make_pair(2,"貂蝉"));m.insert(make_pair(3,"王昭君"));m.insert(make_pair(4,"杨玉环"));m.insert(make_pair(5,"杨贵妃"));printMap(m);}int main(int argc, char const *argv[]) {test01();return 0;
}相关文章:
c++ map/multimap容器 学习笔记
1 map的基本概念 简介: map中所有的元素都是pair pair中第一个元素是key(键),第二个元素是value(值) 所有元素都会根据元素的键值自动排序。本质: map/multimap 属于关联式容器,底…...
安卓逆向之脱壳-认识一下动态加载 双亲委派(一)
安卓逆向和脱壳是安全研究、漏洞挖掘、恶意软件分析等领域的重要环节。脱壳(unpacking)指的是去除应用程序中加固或保护措施的过程,使得可以访问应用程序的原始代码或者数据。脱壳的重要性: 分析恶意软件:很多恶意软件…...
64位的谷歌浏览器Chrome/Google Chrome
64位的谷歌浏览器Chrome/Google Chrome 在百度搜索关键字:chrome,即可下载官方的“谷歌浏览器Chrome/Google Chrome”,但它可能是32位的(切记注意网址:https://www.google.cn/...., 即:google.cnÿ…...
马尔科夫模型和隐马尔科夫模型区别
我用一个天气预报和海藻湿度观测的比喻来解释,保证你秒懂! 1. 马尔可夫模型(Markov Model, MM) 特点:状态直接可见 场景:天气预报(晴天→雨天→阴天…)核心假设: 下一个…...
Python NumPy(7):连接数组、分割数组、数组元素的添加与删除
1 连接数组 函数描述concatenate连接沿现有轴的数组序列stack沿着新的轴加入一系列数组。hstack水平堆叠序列中的数组(列方向)vstack竖直堆叠序列中的数组(行方向) 1.1 numpy.concatenate numpy.concatenate 函数用于沿指定轴连…...
【LLM】deepseek多模态之Janus-Pro和JanusFlow框架
note 文章目录 note一、Janus-Pro:解耦视觉编码,实现多模态高效统一技术亮点模型细节 二、JanusFlow:融合生成流与语言模型,重新定义多模态技术亮点模型细节 Reference 一、Janus-Pro:解耦视觉编码,实现多模…...
2000-2021年 全国各地级市专利申请与获得情况、绿色专利申请与获得情况数据
2000-2021年 全国各地级市专利申请与获得情况、绿色专利申请与获得情况数据.ziphttps://download.csdn.net/download/2401_84585615/89575931 https://download.csdn.net/download/2401_84585615/89575931 2000至2021年,全国各地级市的专利申请与获得情况呈现出显著…...
51单片机(STC89C52)开发:点亮一个小灯
软件安装: 安装开发板CH340驱动。 安装KEILC51开发软件:C51V901.exe。 下载软件:PZ-ISP.exe 创建项目: 新建main.c 将main.c加入至项目中: main.c:点亮一个小灯 #include "reg52.h"sbit LED1P2^0; //P2的…...
数仓ETL测试
提取,转换和加载有助于组织使数据在不同的数据系统中可访问,有意义且可用。ETL工具是用于提取,转换和加载数据的软件。在当今数据驱动的世界中,无论大小如何,都会从各种组织,机器和小工具中生成大量数据。 …...
240. 搜索二维矩阵||
参考题解:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度,可以看作一个二叉搜索树。 假设以左下角元素为根结点, 当target比root大的时候ÿ…...
反向代理模块b
1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…...
Kafka的内部通信协议
引言 kafka内部用到的常见协议和优缺点可以看看原文 Kafka用到的协议 本文奖详细探究kafka核心通信协议和高性能的关键 网络层通信的实现 基于 Java NIO:Kafka 的网络通信层主要基于 Java NIO 来实现,这使得它能够高效地处理大量的连接和数据传输。…...
Excel - Binary和Text两种Compare方法
Option Compare statement VBA里可以定义默认使用的compare方法: Set the string comparison method to Binary. Option Compare Binary That is, "AAA" is less than "aaa". Set the string comparison method to Text. Option Compare Tex…...
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
EasyExcel使用详解
文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言 EasyExcel 是…...
LeetCode 2412.完成所有交易的初始最少钱数:【年度巨献】举例说明(讲明白),由难至简(手脚不乱),附Python一行版
【LetMeFly】2412.完成所有交易的初始最少钱数:【年度巨献】举例说明(讲明白),由难至简(手脚不乱),附Python一行版 文章目录 【LetMeFly】2412.完成所有交易的初始最少钱数:【年度巨献】举例说明(讲明白),由难至简(手脚…...
前端-Rollup
Rollup 是一个用于 JavaScript 的模块打包工具,它将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式,而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许你自由…...
ubuntu黑屏问题解决
重启Ubuntu后,系统自动进入tty1,无法进入桌面。想到前几天安装了一些主题之类的,然后今天才重启,可能是这些主题造成冲突或者问题了把。 这里直接重新安装ubuntu-desktop解决: 更新源: sudo apt-get upd…...
MV结构下设置Qt表格的代理
目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见: 所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客…...
vue3相关知识点
title: vue_1 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端vue3 Webpack ~ vite vue3是基于vite创建的 vite 更快一点 一些准备工作 准备后如图所示 插件 Main.ts // 引入createApp用于创建应用 import {createApp} from vue // 引入App根组件 import App f…...
Lustre v6 语法 - 时序表达式
概述 Lustre v6 语法中,与时序表达式有关的运算,包括 ->(followed by), pre(previous), fby, current, when, merge。其中,除 merge 运算是 Lustre v6 中新引入的外,其余在 Lustre Core 语法中已有定义。 与时序表达式有关的…...
vs2013 使用 eigen 库编译时报 C2059 错的解决方法
(个人感觉)vs2013 就不能使用版本大于等于 3.4 的 eigen,使用 3.3.9 就可以了,再不行就用 3.3.8 另一个博主也遇到过用 vs2013 的时候不能编译 3.4 的 eigen 的问题,不过我用的是 win11,所以感觉跟操作系统…...
Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`
文章目录 Kafka 消费端反复 Rebalance: Attempt to heartbeat failed since group is rebalancing1. Rebalance 过程概述2. 错误原因分析2.1 消费者组频繁加入或退出2.1.1 消费者故障导致频繁重启2.1.2. 消费者加入和退出导致的 Rebalance2.1.3 消费者心跳超时导致的 Rebalance…...
【第九天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-六种常见的图论算法(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的图论算法2. 图论算法3.详细的图论算法1)深度优先搜索(DFS)2…...
微服务网关鉴权之sa-token
目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...
shell脚本批量修改文件名之方法(The Method of Batch Modifying File Names in Shell Scripts)
shell脚本批量修改文件名方法 我们可以使用Shell脚本来实现这个功能。Shell脚本是一种用于自动化任务的编程语言,它可以在Unix/Linux操作系统上运行。在这个脚本中,我们将使用一个for循环来遍历目标目录下的所有文件,并使用mv命令将每个文件…...
华为小米vivo向上,苹果荣耀OPPO向下
日前,Counterpoint发布的手机销量月度报告显示,中国智能手机销量在2024年第四季度同比下降3.2%,成为2024年唯一出现同比下滑的季度。而对于各大智能手机品牌来说,他们的市场份额和格局也在悄然发生变化。 华为逆势向上 在2024年第…...
国产编辑器EverEdit - 输出窗口
1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果,主要包括: 查找类:查找全部,筛选等待操作,可以把查找结果打印到输出窗口中; 程序类:在执行外部程序时(如:命令窗…...
获取snmp oid的小方法1(随手记)
snmpwalk遍历设备的mib # snmpwalk -v <SNMP version> -c <community-id> <IP> . snmpwalk -v 2c -c test 192.168.100.201 .根据获取的值,找到某一个想要的值的oid # SNMPv2-MIB::sysName.0 STRING: test1 [rootzabbix01 fonts]# snmpwalk -v…...
DeepSeek模型:开启人工智能的新篇章
DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…...
