0

0

C++ 如何把int存入map容器 C++ map键值对用法教程【进阶】

尼克

尼克

发布时间:2026-03-10 13:26:02

|

148人浏览过

|

来源于php中文网

原创

绝大多数时候直接用m[key] = val赋值即可;需避免覆盖时改用insert()或emplace()并检查返回值;int作键合法但需校验业务合理性;性能敏感且无需有序时应选unordered_map。

c++ 如何把int存入map容器 c++ map键值对用法教程【进阶】

map 声明后直接赋值就对了

绝大多数时候,你不需要“把 int 存入 map”这种抽象操作——map 本来就是存键值对的容器,只要类型匹配,operator[]insert() 就能搞定。

常见错误是试图用 push_back()(那是 vector 的)或者手动 new 节点(C++ 不需要也不该这么干)。

  • std::map<int int> m;</int> 声明后,m[123] = 456; 立刻插入或覆盖键 123 对应的值
  • 如果只是想插入、不希望覆盖已有键,用 m.insert({123, 456});m.emplace(123, 456);
  • operator[] 会默认构造值类型(比如 int 变成 0),如果键不存在;insert/emplace 则不会触发默认构造,更安全

键重复时 operator[] 会静默覆盖,别指望它报错

map 的键必须唯一,但 C++ 不会在运行时报错提示你“键已存在”。m[key] = val 这种写法,无论 key 是否已存在,都会把 val 赋给它——旧值被无声替换。

这在调试时容易误判逻辑:你以为是新增,其实只是改了老数据。

立即学习C++免费学习笔记(深入)”;

Freepik Mystic
Freepik Mystic

Freepik Mystic 是一款革命性的AI图像生成器,可以直接生成全高清图像

下载
  • 检查键是否存在,用 m.find(key) != m.end()m.count(key) > 0
  • 想严格避免覆盖,别用 operator[],改用 insert() 并检查返回值:auto [it, inserted] = m.insert({key, val});insertedbool
  • emplace() 同样返回 pair<iterator bool></iterator>,且只构造一次对象,比 insert({k,v}) 更高效

int 作键没问题,但注意负数、零、大数的语义是否合理

int 类型本身完全合法作为 map 键,标准库内置了 std::less<int></int> 比较器。但实际使用中,问题往往出在业务逻辑上。

比如用用户 ID 当键,但 ID 是从 1 开始的正整数,你却意外插入了 0 或负数,后续查找失败却查不出原因。

  • 确认输入源是否可控:读文件、网络包、用户输入来的 int,可能含非法值
  • 不要依赖 map 帮你过滤——它照单全收,只是按大小排序存储
  • 如果键有明确取值范围(如 ID ∈ [1, 1000000]),建议在插入前做断言或日志,而不是等下游逻辑崩了才找

性能敏感场景慎用 map,考虑 unordered_map

如果你只关心“有没有这个键”“取它的值”,不依赖键的顺序,std::map 的红黑树结构反而成了累赘:每次插入/查找都是 O(log n),而 std::unordered_map<int int></int> 平均是 O(1)

很多人图省事默认用 map,结果在循环里反复查几千次,性能差出一截还找不到原因。

  • unordered_map 不保证遍历顺序,键无序——如果代码依赖 for (auto& p : m) 按 key 升序输出,就不能换
  • 小数据量(unordered_map 优势明显
  • 记得包含头文件:#include <unordered_map></unordered_map>,不是 <map></map>

真正容易被忽略的是:mapunordered_map 的迭代器失效规则完全不同,一旦你在循环中边遍历边 erase(),行为差异会直接导致崩溃或漏删——这事跟 int 关系不大,但凡用到容器修改,就得盯紧这点。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.10.12

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

990

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

607

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

314

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

24

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 4.3万人学习

FastAPI框架精讲课程
FastAPI框架精讲课程

共38课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号