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

C++ map详解

C++ map

map 是 C++ 标准库中的关联容器,存储 键值对(key-value),并按照键自动排序

一、基本特点

1.头文件:#include
2.存储方式:键值对 pair<const Key, Value>
3.排序:按键升序(默认)
4.唯一性:键唯一,不能重复
5.时间复杂度:插入/删除/查找 O(log n)

二、常用操作

1. 声明和初始化

#include<map>#include<string>usingnamespacestd;// 空 mapmap<int,string>m1;// 初始化列表map<int,string>m2={{1,"apple"},{2,"banana"},{3,"cherry"}};// 拷贝构造map<int,string>m3(m2);

2. 插入元素

map<int,string>m;// 方法1:使用 insertm.insert({1,"apple"});m.insert(pair<int,string>(2,"banana"));m.insert(make_pair(3,"cherry"));// 方法2:使用 [] 运算符(如果键不存在则创建)m[4]="date";// 插入键4,值"date"m[1]="avocado";// 键1已存在,更新值// 方法3:insert_or_assignm.insert_or_assign(5,"elderberry");

3. 访问元素

map<int,string>m={{1,"apple"},{2,"banana"},{3,"cherry"}};// 使用 [](键不存在时会创建!危险)string s1=m[1];// "apple"string s2=m[100];// 错误!会插入键100,值为空字符串// 使用 at()(推荐,键不存在时抛异常)string s3=m.at(2);// "banana"// string s4 = m.at(100); // 抛出 out_of_range 异常// 使用 find(最安全)autoit=m.find(3);if(it!=m.end()){string s=it->second;// "cherry"}

4. 删除元素

map<int,string>m={{1,"a"},{2,"b"},{3,"c"},{4,"d"}};// 按键删除m.erase(2);// 删除键2// 按迭代器删除autoit=m.find(3);if(it!=m.end()){m.erase(it);}// 删除范围autofirst=m.find(1);autolast=m.find(4);m.erase(first,last);// 删除 1 到 4 之前的元素

5. 查找元素

map<int,string>m={{1,"apple"},{2,"banana"},{3,"cherry"}};// find:返回迭代器,找不到返回 end()autoit=m.find(2);if(it!=m.end()){cout<<it->first<<" -> "<<it->second<<endl;}// count:返回键存在的数量(0 或 1)if(m.count(2)){cout<<"键2存在"<<endl;}// lower_bound / upper_bound(用于范围查询)autolow=m.lower_bound(2);// 第一个 >= 2 的位置autoup=m.upper_bound(2);// 第一个 > 2 的位置

6. 遍历

map<int,string>m={{1,"a"},{2,"b"},{3,"c"}};// 范围 for 循环for(constauto&p:m){cout<<p.first<<" -> "<<p.second<<endl;}// 迭代器for(autoit=m.begin();it!=m.end();++it){cout<<it->first<<" -> "<<it->second<<endl;}

三、完整示例

#include<iostream>#include<map>#include<string>usingnamespacestd;intmain(){map<string,int>scores;// 插入scores["Alice"]=95;scores["Bob"]=87;scores.insert({"Charlie",92});// 修改scores["Alice"]=98;// 查找string name="Bob";if(scores.find(name)!=scores.end()){cout<<name<<" 的分数是 "<<scores[name]<<endl;}// 遍历(自动按名字排序)for(constauto&[name,score]:scores){cout<<name<<" -> "<<score<<endl;}// 删除scores.erase("Charlie");cout<<"总人数: "<<scores.size()<<endl;return0;}
http://www.jsqmd.com/news/860204/

相关文章:

  • 告别命令行恐惧!用pytest.ini配置文件,一键搞定Pytest测试运行
  • 想找闸门工厂?这几家值得你深入了解,速来一看!
  • 基于 PyTorch 的 TransU-Net 模型进行不同城市建筑物的精准提取 来继续遥感图像语义分割
  • 前端高频难题——防抖与节流的精准实现(避坑版)
  • 数字孪生完整教程(开发工具 + 三方对接全流程)
  • Aube:下一代 Node.js 包管理器,性能远超 pnpm
  • 书匠策AI官网www.shujiangce.com:论文降重降AIGC,原来可以这么丝滑?
  • STM32F103C8T6最小系统板避坑指南:从ST-LINK连接到Keil5乱码,新手常踩的5个坑
  • 多智能体系统的最大难题:不是推理,而是协同
  • 告别乱码!手把手教你为SquareLine Studio 1.3.1添加中文字体库(附常用字库文件)
  • 10 万行 Rust 代码开发实测封神!AI 应用经验大揭秘
  • 【AI入门知识点】Agent 是什么?为什么说它是 AI 的下一阶段?
  • 开源|一款零服务器代码知识图谱引擎,支持多语言解析、Graph RAG 问答、AI 代理集成的代码分析平台
  • DB2里LISTAGG拼接超长数据报错?试试xmlagg+xml2clob这个组合拳(附完整SQL示例)
  • 书匠策AI到底能不能帮你搞定毕业论文?一个写作博主的实测级科普
  • 广东抖店商家与带货达人:短视频运营培训机构测评
  • 智慧树自动刷课插件:三步实现在线学习效率倍增的终极方案
  • 艾络迅 × 荣耀:联合推出Meteer AI跳舞机器人玩具,智能科技重新定义儿童陪伴
  • 从“念稿子”到“讲故事”:学术答辩PPT的范式转移
  • 保姆级避坑指南:在Ubuntu 22.04虚拟机里搞定ESP-IDF环境(附常见错误解决)
  • 长期使用后回顾聚合平台在服务稳定性上的实际表现
  • 对比直接使用官方 API 体验 Taotoken 在多模型选型上的便利
  • Agent技能调用LLM API的7种核心形式
  • 水下叶轮脉动压力测试:Kulite压力传感器强在哪?安装门槛怎么破?
  • 照着用就行:高效论文写作全流程AI论文网站推荐(2026 最新)
  • vivo统一AI Agent能力,Chat模式落地打造可“拼”底座助力业务演进!
  • 在 GPT 里[读文档]这件事,我测了 5 个 MCP 工具,为什么复杂 OCR 场景最终会走向 MinerU
  • 为 OpenClaw 配置 Taotoken 作为后端模型供应商的详细操作流程
  • CTF实战:熊海CMS 1.0的另类利用——绕过文件上传限制,用Pearcmd.php实现RCE的完整流程
  • 对比直接使用官方 API,通过 Taotoken 调用在成本透明度上的提升体验