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 属于关联式容器,底…...
【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开
之前在Vmware虚拟机里配置了mumu模拟器,现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统,对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项,启用共享文件夹 3、复…...
日志收集Day007
1.配置ES集群TLS认证: (1)elk101节点生成证书文件 cd /usr/share/elasticsearch ./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass "" --days 3650 (2)elk101节点为证书文件修改属主和属组 chown elasticsearch:elasticsearch con…...
虚拟机里网络设置-桥接与NAT
桥接(Bridging)和NAT(网络地址转换,Network Address Translation)是网络中的两种不同技术,主要用于数据包的处理和转发。以下是它们的主要区别: 1. 工作原理 桥接: 桥接工作在数据链…...
人工智能 - 1
深度强化学习(Deep Reinforcement Learning) 图神经网络(Graph Neural Networks, GNNs) Transformer 一种深度学习模型 大语言模型(Large Language Models, LLMs) 人工智能 • Marvin Minsky 将其定义…...
小程序-基础加强-自定义组件
前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…...
Kafka 压缩算法详细介绍
文章目录 一 、Kafka 压缩算法概述二、Kafka 压缩的作用2.1 降低网络带宽消耗2.2 提高 Kafka 生产者和消费者吞吐量2.3 减少 Kafka 磁盘存储占用2.4 减少 Kafka Broker 负载2.5 降低跨数据中心同步成本 三、Kafka 压缩的原理3.1 Kafka 压缩的基本原理3.2. Kafka 压缩的工作流程…...
单词翻转(信息学奥赛一本通1144)
题目来源 信息学奥赛一本通(C版)在线评测系统 题目描述 1144:单词翻转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:60098 通过数: 26099 【题目描述】 输入一个句子(一行),将句子中的每一个单词翻转后输出。 【输入…...
DeepSeek 模型全览:探索不同类别的模型
DeepSeek 是近年来备受关注的 AI 研究团队,推出了一系列先进的深度学习模型,涵盖了大语言模型(LLM)、代码生成模型、多模态模型等多个领域。本文将大概介绍 DeepSeek 旗下的不同类别的模型,帮助你更好地理解它们的特点…...
我的2024年年度总结
序言 在前不久(应该是上周)的博客之星入围赛中铩羽而归了。虽然心中颇为不甘,觉得这一年兢兢业业,每天都在发文章,不应该是这样的结果(连前300名都进不了)。但人不能总抱怨,总要向前…...
DeepSeek回答人不会干出超出视角之外的事
我本身是有着深度思考习惯的重度患者,当我遇到一个AI会深度思考的时候,我觉得找到了一个同类,是不是可以学习周伯通的左右手互博大法?下面我们拿着我的一点思考,让DeepSeek来再深度思考挖掘。 人不会干出超出视角之外的…...
前端知识速记—JS篇:null 与 undefined
前端知识速记—JS篇:null 与 undefined 什么是 null 和 undefined? 1. undefined 的含义 undefined 是 JavaScript 中默认的值,表示某个变量已被声明但尚未被赋值。当尝试访问一个未初始化的变量、函数没有返回值时,都会得到 u…...
Hive:静态分区(分区语法,多级分区,分区的查看修改增加删除)
hive在建表时引入了partition概念。即在建表时,将整个表存储在不同的子目录中,每一个子目录对应一个分区。在查询时,我们就可以指定分区查询,避免了hive做全表扫描,从而提高查询率。 oracle和Hive分区的区别 orcale在…...
升级到Mac15.1后pod install报错
升级Mac后,Flutter项目里的ios项目运行 pod install报错, 遇到这种问题,不要着急去百度,大概看一下报错信息,每个人遇到的问题都不一样。 别人的解决方法并不一定适合你; 下面是报错信息: #…...
智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案
内容概要 快鲸智慧园区管理系统,作为一款备受欢迎的智能化管理解决方案,致力于为企业提供高效的运作效率与风险控制优化。具体来说,这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…...
JxBrowser 8.2.2 版本发布啦!
JxBrowser 8.2.2 版本发布啦! • 已更新 #Chromium 至更新版本 • 实施了多项质量改进 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。...
LangChain的开发流程
文章目录 LangChain的开发流程开发密钥指南3种使用密钥的方法编写一个取名程序 LangChain表达式 LangChain的开发流程 为了更深人地理解LangChain的开发流程,本文将以构建聊天机器人为实际案例进行详细演示。下图展示了一个设计聊天机器人的LLM应用程序。 除了Wb服务…...
AI在自动化测试中的伦理挑战
在软件测试领域,人工智能(AI)已经不再是遥不可及的未来技术,而是正在深刻影响着测试过程的现实力量。尤其是在自动化测试领域,AI通过加速测试脚本生成、自动化缺陷检测、测试数据生成等功能,极大提升了测试…...
《Origin画百图》之同心环图
《Origin画百图》第四集——同心环图 入门操作可查看合集中的《30秒,带你入门Origin》 具体操作: 1.数据准备:需要X和Y两列数据 2. 选择菜单 绘图 > 条形图,饼图,面积图: 同心圆弧图 3. 这是绘制的基础图形&…...
TPA注意力机制详解及代码复现
基本原理 在深入探讨TPA注意力机制的数学表达之前,我们需要先理解其基本原理。TPA注意力机制是一种创新的注意力机制,旨在解决传统注意力机制在处理大规模数据时面临的内存和计算效率问题。 TPA注意力机制的核心思想是利用 张量分解 来压缩注意力机制中的Q、K、V表示,同时…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
