当前位置: 首页 > news >正文

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的基本概念 简介&#xff1a; map中所有的元素都是pair pair中第一个元素是key&#xff08;键&#xff09;&#xff0c;第二个元素是value&#xff08;值&#xff09; 所有元素都会根据元素的键值自动排序。本质&#xff1a; map/multimap 属于关联式容器&#xff0c;底…...

【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开

之前在Vmware虚拟机里配置了mumu模拟器&#xff0c;现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统&#xff0c;对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项&#xff0c;启用共享文件夹 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

桥接&#xff08;Bridging&#xff09;和NAT&#xff08;网络地址转换&#xff0c;Network Address Translation&#xff09;是网络中的两种不同技术&#xff0c;主要用于数据包的处理和转发。以下是它们的主要区别&#xff1a; 1. 工作原理 桥接&#xff1a; 桥接工作在数据链…...

人工智能 - 1

深度强化学习&#xff08;Deep Reinforcement Learning&#xff09; 图神经网络&#xff08;Graph Neural Networks, GNNs&#xff09; Transformer 一种深度学习模型 大语言模型&#xff08;Large Language Models, LLMs&#xff09; 人工智能 • 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)

题目来源 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 题目描述 1144&#xff1a;单词翻转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:60098 通过数: 26099 【题目描述】 输入一个句子(一行)&#xff0c;将句子中的每一个单词翻转后输出。 【输入…...

DeepSeek 模型全览:探索不同类别的模型

DeepSeek 是近年来备受关注的 AI 研究团队&#xff0c;推出了一系列先进的深度学习模型&#xff0c;涵盖了大语言模型&#xff08;LLM&#xff09;、代码生成模型、多模态模型等多个领域。本文将大概介绍 DeepSeek 旗下的不同类别的模型&#xff0c;帮助你更好地理解它们的特点…...

我的2024年年度总结

序言 在前不久&#xff08;应该是上周&#xff09;的博客之星入围赛中铩羽而归了。虽然心中颇为不甘&#xff0c;觉得这一年兢兢业业&#xff0c;每天都在发文章&#xff0c;不应该是这样的结果&#xff08;连前300名都进不了&#xff09;。但人不能总抱怨&#xff0c;总要向前…...

DeepSeek回答人不会干出超出视角之外的事

我本身是有着深度思考习惯的重度患者&#xff0c;当我遇到一个AI会深度思考的时候&#xff0c;我觉得找到了一个同类&#xff0c;是不是可以学习周伯通的左右手互博大法&#xff1f;下面我们拿着我的一点思考&#xff0c;让DeepSeek来再深度思考挖掘。 人不会干出超出视角之外的…...

前端知识速记—JS篇:null 与 undefined

前端知识速记—JS篇&#xff1a;null 与 undefined 什么是 null 和 undefined&#xff1f; 1. undefined 的含义 undefined 是 JavaScript 中默认的值&#xff0c;表示某个变量已被声明但尚未被赋值。当尝试访问一个未初始化的变量、函数没有返回值时&#xff0c;都会得到 u…...

Hive:静态分区(分区语法,多级分区,分区的查看修改增加删除)

hive在建表时引入了partition概念。即在建表时&#xff0c;将整个表存储在不同的子目录中&#xff0c;每一个子目录对应一个分区。在查询时&#xff0c;我们就可以指定分区查询&#xff0c;避免了hive做全表扫描&#xff0c;从而提高查询率。 oracle和Hive分区的区别 orcale在…...

升级到Mac15.1后pod install报错

升级Mac后&#xff0c;Flutter项目里的ios项目运行 pod install报错&#xff0c; 遇到这种问题&#xff0c;不要着急去百度&#xff0c;大概看一下报错信息&#xff0c;每个人遇到的问题都不一样。 别人的解决方法并不一定适合你&#xff1b; 下面是报错信息&#xff1a; #…...

智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案

内容概要 快鲸智慧园区管理系统&#xff0c;作为一款备受欢迎的智能化管理解决方案&#xff0c;致力于为企业提供高效的运作效率与风险控制优化。具体来说&#xff0c;这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…...

JxBrowser 8.2.2 版本发布啦!

JxBrowser 8.2.2 版本发布啦&#xff01; • 已更新 #Chromium 至更新版本 • 实施了多项质量改进 &#x1f517; 点击此处了解更多详情。 &#x1f193; 获取 30 天免费试用。...

LangChain的开发流程

文章目录 LangChain的开发流程开发密钥指南3种使用密钥的方法编写一个取名程序 LangChain表达式 LangChain的开发流程 为了更深人地理解LangChain的开发流程&#xff0c;本文将以构建聊天机器人为实际案例进行详细演示。下图展示了一个设计聊天机器人的LLM应用程序。 除了Wb服务…...

AI在自动化测试中的伦理挑战

在软件测试领域&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是遥不可及的未来技术&#xff0c;而是正在深刻影响着测试过程的现实力量。尤其是在自动化测试领域&#xff0c;AI通过加速测试脚本生成、自动化缺陷检测、测试数据生成等功能&#xff0c;极大提升了测试…...

《Origin画百图》之同心环图

《Origin画百图》第四集——同心环图 入门操作可查看合集中的《30秒&#xff0c;带你入门Origin》 具体操作&#xff1a; 1.数据准备&#xff1a;需要X和Y两列数据 2. 选择菜单 绘图 > 条形图&#xff0c;饼图&#xff0c;面积图: 同心圆弧图 3. 这是绘制的基础图形&…...

TPA注意力机制详解及代码复现

基本原理 在深入探讨TPA注意力机制的数学表达之前,我们需要先理解其基本原理。TPA注意力机制是一种创新的注意力机制,旨在解决传统注意力机制在处理大规模数据时面临的内存和计算效率问题。 TPA注意力机制的核心思想是利用 张量分解 来压缩注意力机制中的Q、K、V表示,同时…...

深入理解Java并发编程中的原子操作、volatile关键字与读写锁

1. 原子操作与AtomicInteger等原子类 1.1 原子操作的原理 在多线程环境中,多个线程可能会同时访问和修改共享资源。如果这些操作不是原子性的(即可以被中断),那么可能会导致数据不一致或竞态条件(race condition)。原子操作是指不可分割的操作,即在多线程环境下,这些…...

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…...

SpringBoot Web开发(SpringMVC)

SpringBoot Web开发&#xff08;SpringMVC) MVC 核心组件和调用流程 Spring MVC与许多其他Web框架一样&#xff0c;是围绕前端控制器模式设计的&#xff0c;其中中央 Servlet DispatcherServlet 做整体请求处理调度&#xff01; . 除了DispatcherServletSpringMVC还会提供其他…...

汽车蓝牙钥匙定位仿真小程序

此需求来自于粉丝的真实需求,假期没事,牛刀小试。 一、项目背景 如今,智能车钥匙和移动端定位技术已经相当普及。为了探索蓝牙 Beacon 在短距离定位场景下的可行性,我们搭建了一个简易原型:利用 UniApp 在移动端采集蓝牙信标的 RSSI(信号强度),通过三边定位算法估算钥…...

K8S中高级存储之PV和PVC

高级存储 PV和PVC 由于kubernetes支持的存储系统有很多&#xff0c;要求客户全都掌握&#xff0c;显然不现实。为了能够屏蔽底层存储实现的细节&#xff0c;方便用户使用&#xff0c; kubernetes引入PV和PVC两种资源对象。 PV&#xff08;Persistent Volume&#xff09; PV是…...

【C语言进阶】- 动态内存管理

动态内存管理 1.1 为什么存在动态内存分配1.2 动态内存函数介绍2.1 malloc函数的使用2.2 free函数的使用2.3 calloc函数的使用2.4 realloc函数的使用3.1 常见的动态内存错误3.2 常见笔试题 1.1 为什么存在动态内存分配 我们已经掌握的内存开辟方式有&#xff1a; int val 20;…...

Python实现基于TD3(Twin Delayed Deep Deterministic Policy Gradient)算法来实时更新路径规划算法

下面是一个使用Python实现基于TD3&#xff08;Twin Delayed Deep Deterministic Policy Gradient&#xff09;算法来实时更新路径规划算法的三个参数&#xff08;sigma0&#xff0c;rho0 和 theta&#xff09;的示例代码。该算法将依据障碍物环境进行优化。 实现思路 环境定义…...

pytorch实现半监督学习

半监督学习&#xff08;Semi-Supervised Learning&#xff0c;SSL&#xff09;结合了有监督学习和无监督学习的特点&#xff0c;通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下&#xff1a; 1. 数据准备 有标签数据&#xff08;Labeled Data&#xff09;&…...

我的毕设之路:(2)系统类型的论文写法

一般先进行毕设的设计与实现&#xff0c;再在现成毕设基础上进行描述形成文档&#xff0c;那么论文也就成形了。 1 需求分析&#xff1a;毕业设计根据开题报告和要求进行需求分析和功能确定&#xff0c;区分贴合主题的主要功能和拓展功能能&#xff0c;删除偏离无关紧要的功能…...

LosslessScaling-学习版[steam价值30元的游戏无损放大/补帧工具]

LosslessScaling 链接&#xff1a;https://pan.xunlei.com/s/VOHc-yZBgwBOoqtdZAv114ZTA1?pwdxiih# 解压后运行"A-绿化-解压后运行我.cmd"...