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

STL容器-map P3613【深基15.例2】寄包柜 普及-

题目来源:洛谷题库

文章目录

    • map例题
    • map知识点
        • map
          • 使用注意:
          • `map`的常用用法

map例题

P3613【深基15.例2】寄包柜 普及-
题意

根据数据插入/查询

思路

map键值对可以根据柜子编号查找物品,但是柜子又有很多个,考虑数组或者map数组或者vector

数据约束

暂无

参考代码

#include <bits/stdc++.h>
#include <map>
using namespace std;
const int N = 100005;
int main() {//错误示范,主要是内存开销大导致溢出而出错,如果N小就没问题 
//    map<int,int> m[N];
//   int n,q;//q表示询问次数 
//   int op,i,j,k;//操作数、柜子i,格子j 
//   cin>>n>>q;
//   while(q--){
//   	cin>>op;
//   	if(op==1){
//   		cin>>i>>j>>k;
//   		m[i][j]=k; 
//	   }else{
//	   	cin>>i>>j;
//	   	cout<<m[i][j]<<endl;
//	   }//方法一:直接给键值对的内容留一定的空间,占用不同的地址即可map<int,int> m;int n,q;//q表示询问次数 int op,i,j,k;//操作数、柜子i,格子j cin>>n>>q;while(q--){cin>>op;if(op==1){cin>>i>>j>>k;m[i*N+j]=k; }else{cin>>i>>j;cout<<m[i*N+j]<<endl;}}//方法二:vecot<map>vector<map<int, int>> m(N);  // 使用 vector 动态分配 map 数组int n, q;int op, i, j, k;cin >> n >> q;while (q--) {cin >> op;if (op == 1) {cin >> i >> j >> k;m[i][j] = k;  // 更新柜子 i 中的格子 j 的值} else {cin >> i >> j;cout << m[i][j] << endl;  // 输出柜子 i 中格子 j 的值}}return 0;
}

map知识点

map

特点

  • 有序存储:根据键(key)对元素自动排序
  • 键值对存储:每个元素都是一个键值对(key-value),你可以通过键来查找值。
  • 查找/插入高效 O(log n):通过键可以非常快速地查找对应的值。

例子
想象你在一个图书馆找书,书架上的书按照编号顺序排列。如果你知道书的编号,你可以直接找到书的位置。图书馆工作人员能根据书名快速帮你找到对应的编号(键),从而查找书籍(值)。

在C++中,map(也称为关联容器或红黑树)是一种关联容器,它按照键值对(关键字和值)存储元素,容器元素是按照关键字排序,并且不允许有多个元素的关键字相同。通过键进行快速查找、插入和删除。

使用注意:
  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value) ; 例如: map<string,int> a;可以将字符串映射为整数,map<double,int>a;可以将双精度浮点数映射为整数。
  • multimap允许存储相同键的元素
  • map中的元素是一对数据︰<关键字,数值>,这个概念在STL中有专门的数据结构叫pair,有一个相关函数make_pair和两个成员名first,second。可以直接类似Pair修改map的值
  • 不能修改map容器的关键字。map是按照关键字排序,当关键修改,容器不会重新调整排序,于是容器的有序性会被破坏,再再容器上进行查找等操作是会得到错误结果
  • map 是一个基于红黑树(或其他平衡树)的数据结构,每个 map 会为每个键值对分配内存。因此,map 的内存占用不仅仅是存储键值对的数据,还包含树结构的指针等开销。具体的内存占用取决于 map 中存储的元素数量和每个元素的大小。 map<int,int> m[N];可能单个数据就占16个字节 所以一般不用而是用vector<map<int, int>> m(N)代替
map的常用用法

1、创建map实例:

//这里的KeyType是唯一的标识符类型,ValueType是存储的数据类型。
map<KeyType, ValueType> myMap;

2、插入元素:

如果键已存在,新值会覆盖旧值

//方法一
myMap.insert({key, value});
//方法二-类似于数组,只是map的下表是键而非自增整数
myMap[key] = value;
//方法三:直接 插入pair即可
myMap.insert(make_pair("wsad",6));
myMap.insert(pair<string,int>("jkluio",10086));

3、查找元素:

find()回指定关键字的位置迭代器,指向键对应的元素,如不存在迭代器会指向map.end()。

map<type1,type2>::iterator it = myMap.find(key);
if (it != myMap.end()) {cout << "Value: " << it->second << endl;
}

4、遍历map:

//迭代器
map<string, int>::iterator it;
for(it=mp.begin();it!=mp.end();it++){cout<<it->first<<" "<<it->second<<endl;}

这会遍历整个map,打印出所有的键值对。

5、删除元素

如果键存在,元素会被删除;如果使用迭代器删除,必须确保迭代器指向map中的元素。

map<string, string> dictionary;    // 创建一个 map,键是 string,值是 string// 插入一些键值对dictionary["apple"] = "A fruit that is red, green, or yellow.";dictionary["banana"] = "A yellow fruit that is long and curved.";dictionary["cat"] = "A small domesticated carnivorous mammal.";// 查找并输出键 "apple" 对应的值map<string, string>::iterator it = dictionary.find("apple");if (it != dictionary.end()) {cout << "Found: " << it->first << " -> " << it->second << endl;} else {cout << "apple: Not found!" << endl;}// 检查某个键是否存在并删除它if (dictionary.find("banana") != dictionary.end()) {cout << "Deleting banana..." << endl;dictionary.erase("banana");} else {cout << "banana: Not found, cannot delete!" << endl;}// 再次查找并输出剩下的元素cout << "\nRemaining items in the dictionary:" << endl;for (map<string, string>::iterator it = dictionary.begin(); it != dictionary.end(); ++it) {cout << it->first << ": " << it->second << endl;}

例题:

相关文章:

STL容器-map P3613【深基15.例2】寄包柜 普及-

题目来源&#xff1a;洛谷题库 文章目录 map例题map知识点map使用注意&#xff1a;map的常用用法 map例题 P3613【深基15.例2】寄包柜 普及- 题意 根据数据插入/查询 思路 map键值对可以根据柜子编号查找物品&#xff0c;但是柜子又有很多个&#xff0c;考虑数组或者map数组…...

【MySQL 进阶之路】了解 性能优化 与 设计原则

1.B树的优势 “矮胖”结构&#xff1a; 矮&#xff1a;B树的每个节点存储更多的关键字&#xff0c;从而减少了树的层级&#xff08;最多三层&#xff09;&#xff0c;减少了磁盘I/O操作&#xff0c;提高了查询效率。胖&#xff1a;叶子节点存储实际的数据&#xff0c;并使用双…...

MySQL之数据库三大范式

一、什么是范式&#xff1f; 范式是数据库遵循设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 &#xff08;范式是具有最小冗余的表结构&#xff09; 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式&#xff08;1NF/2NF/3NF…...

[大数据]Hudi

G:\Bigdata\17.hudi\大数据技术之数据湖Hudi 第1章 Hudi概述 1.1 Hudi简介 Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服…...

jenkins harbor安装

Harbor是一个企业级Docker镜像仓库‌。 文章目录 1. 什么是Docker私有仓库2. Docker有哪些私有仓库3. Harbor简介4. Harbor安装 1. 什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub&#xff0c;而与Dock…...

JavaScript 高级特性与 ES6 新特性:正则表达式的深度探索

在现代 JavaScript 开发中&#xff0c;正则表达式&#xff08;Regular Expressions&#xff09;和高级特性、ES6 新特性的结合使用&#xff0c;能够极大地提升代码的简洁性、可读性和功能性。本文将深入探讨 JavaScript 中的正则表达式及其在高级特性和 ES6 新特性中的应用&…...

正则表达式——参考视频B站《奇乐编程学院》

智能指针 一、背景&#x1f388;1.1. 模式匹配&#x1f388;1.2. 文本替换&#x1f388;1.3. 数据验证&#x1f388;1.4. 信息提取&#x1f388;1.5. 拆分字符串&#x1f388;1.6. 高级搜索功能 二、原料2.1 参考视频2.2 验证网址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…...

【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )

文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...

【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节

目前的一些多模态大模型的工作倾向于使用MLLM进行推理任务&#xff0c;然而&#xff0c;纯OCR任务偏向于模型的感知能力&#xff0c;对于文档场景&#xff0c;由于文字密度较高&#xff0c;现有方法往往通过增加图像token的数量来提升性能。这种策略在增加新的语言时&#xff0…...

Mybatis动态sql执行过程

动态SQL的执行原理主要涉及到在运行时根据条件动态地生成SQL语句&#xff0c;然后将其发送给数据库执行。以下是动态SQL执行原理的详细解释&#xff1a; 一、接收参数 动态SQL首先会根据用户的输入或系统的条件接收参数。这些参数可以是查询条件、更新数据等&#xff0c;它们…...

leetcode 31 Next Permutation

题意 找到下一个permutation是什么&#xff0c;对于一个数组[1&#xff0c;2&#xff0c;3]&#xff0c;下一个排列就是[1, 3, 2] 链接 https://leetcode.com/problems/next-permutation/ 思考 首先任何一个permutation满足一个性质&#xff0c;从某个位置往后一定是降序。…...

每日一练 | 华为 eSight 创建的缺省角色

01 真题题目 下列选项中&#xff0c;不属于华为 eSight 创建的缺省角色的是&#xff1a; A. Administrator B. Monitor C. Operator D. End-User 02 真题答案 D 03 答案解析 华为 eSight 是一款综合性的网络管理平台&#xff0c;提供了多种管理和监控功能。 为了确保不同用…...

PyTorch基本使用-自动微分模块

学习目的&#xff1a;掌握自动微分模块的使用 训练神经网络时&#xff0c;最常用的算法就是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度&#xff0c;PyTorch 内置了名为 torch.autogra…...

libevent-Reactor设计模式【1】

一、Libevent概述 1、简介 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&#…...

奇奇怪怪的错误-Tag和space不兼容

报错信息如下&#xff1a; TabError: inconsistent use of tabs and spaces in indentation make: *** [Makefile:24: train] Error 1不能按Tab&#xff0c;要老老实实按space 不过可以在编辑器里面改&#xff0c;把它们调整成一致的&#xff1b;...

29.攻防世界ics-06

ics-06 难度&#xff1a;1 方向&#xff1a;Web 题目描述: 云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 进入靶场 发现有一处能点动 多了个id1 我其实尝试改过id数&#xff0c;不过没什么变化&#xf…...

强化学习路径规划:基于SARSA算法的移动机器人路径规划,可以更改地图大小及起始点,可以自定义障碍物,MATLAB代码

一、SARSA算法概述 SARSA&#xff08;State-Action-Reward-State-Action&#xff09;是一种在线强化学习算法&#xff0c;用于解决决策问题&#xff0c;特别是在部分可观测的马尔可夫决策过程&#xff08;POMDPs&#xff09;中。SARSA算法的核心思想是通过与环境的交互来学习一…...

【MFC】如何读取rtf文件并进行展示

tf是微软的一个带格式的文件&#xff0c;比word简单&#xff0c;我们可以用写字板等程序打开编辑。下面以具体实例讲解如何在自己程序中展示rtf文件。 首先使用VS2022创建一个MFC的工程。 VIEW类需要选择richview类&#xff0c;用于展示&#xff0c;如下图&#xff1a; 运行效…...

Vulhub:Log4j[漏洞复现]

CVE-2017-5645(Log4j反序列化) 启动靶场环境 docker-compose up -d 靶机IPV4地址 ifconfig | grep eth0 -A 5 ┌──(root㉿kali)-[/home/kali/Desktop/temp] └─# ifconfig | grep eth0 -A 5 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 in…...

面向预测性维护的TinyML技术栈全面综述

论文标题&#xff1a;A Holistic Review of the TinyML Stack for Predictive Maintenance&#xff08;面向预测性维护的TinyML技术栈全面综述&#xff09; 作者信息&#xff1a;Emil Njor, Mohammad Amin Hasanpour, Jan Madsen, Xenofon Fafoutis&#xff0c;均来自丹麦技术…...

沈阳理工大学《2024年811自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《沈阳理工大学811自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题...

用前端html如何实现2024烟花效果

用HTML、CSS和JavaScript编写的网页&#xff0c;主要用于展示“2024新年快乐&#xff01;”的文字形式烟花效果。下面是对代码主要部分的分析&#xff1a; HTML结构 包含三个<canvas>元素&#xff0c;用于绘制动画。引入百度统计的脚本。 CSS样式 设置body的背景为黑…...

Redis应用-在用户数据里的应用

1.社区电商的业务闭环 接下来介绍的社区电商是以Redis作为主体技术、以MySQL和RocketMQ作为辅助技术实现的。 (1)社区电商运作模式 社区电商的关键点在于社区,而电商则是辅助性质(次要地位,流量变现)。社区可以分成很多种社区,比如美食社区、美妆社区、影评社区、妈妈社区…...

C++ 中面向对象编程如实现数据隐藏

在C中&#xff0c;面向对象编程&#xff08;OOP&#xff09;通过封装&#xff08;Encapsulation&#xff09;来实现数据隐藏。封装是OOP的一个核心概念&#xff0c;它允许将对象的属性和行为&#xff08;即数据和方法&#xff09;组合在一起&#xff0c;并对外隐藏对象的内部实…...

JavaEE 【知识改变命运】04 多线程(3)

文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因&#xff1a;1.线程是抢占式的2. 多线程修改同一个变量&#xff08;程序的要求&#xff09;3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…...

gz中生成模型

生成模型 通过服务调用生成 还记得parameter_bridge 吗&#xff1f; 我们在生成桥接的时候调用了这个cpp文件。 一个 parameter_bridge 实例用于消息传递&#xff08;传感器数据&#xff09;。之前的例子 另一个 parameter_bridge 实例用于服务桥接&#xff08;动态生成模型…...

前端(Axios和Promis)

Promise 语法 <script>// 创建promise对象// 此函数需要再传入两个参数,都是函数类型let pnew Promise((resolve,reject)>{if(3>2){resolve({name:"李思蕾",age:23,地址:"河南省"});}else{reject("error");}});console.log(p);p.th…...

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent&#xff1a;重塑业务流程自动化的未来力量》 摘要&#xff1a;整体思路是先介绍 AI Agent 的基本情况&#xff0c;再深入阐述其实现业务流程自动化的方法和在不同领域的应用&#xff0c;接着分析其价值和面临的挑战&#xff0c;最后得出结论&#xff0c;为读者全面…...

前端页面导出word

html-docx-js bug: vite使用html-docx.js会报错&#xff0c;点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…...

【考前预习】1.计算机网络概述

往期推荐 子网掩码、网络地址、广播地址、子网划分及计算-CSDN博客 一文搞懂大数据流式计算引擎Flink【万字详解&#xff0c;史上最全】-CSDN博客 浅学React和JSX-CSDN博客 浅谈云原生--微服务、CICD、Serverless、服务网格_云原生 serverless-CSDN博客 浅谈维度建模、数据分析…...