0

0

c++中map的基本用法总结_map容器核心操作与应用实例

下次还敢

下次还敢

发布时间:2025-09-23 08:19:01

|

1034人浏览过

|

来源于php中文网

原创

map是C++ STL中基于红黑树的关联容器,支持唯一键的自动排序和O(log n)时间复杂度的查找、插入与删除。可通过默认构造、初始化列表、拷贝构造创建,常用insert、emplace或下标操作插入元素;推荐用find或at访问以避免下标访问导致的意外插入;可用erase按键或迭代器删除元素,clear清空;支持范围for和迭代器按键升序遍历;常用于统计单词频次等需键值映射的场景,如示例中用wordCount[word]++统计各单词出现次数并输出结果。

c++中map的基本用法总结_map容器核心操作与应用实例

map 是 C++ STL 中一种非常实用的关联容器,用于存储键值对(key-value pairs),其中每个键唯一且自动排序。它基于红黑树实现,查找、插入和删除操作的时间复杂度为 O(log n),适合需要快速查找和有序遍历的场景。

构造与初始化

map 可以通过多种方式创建和初始化:

  • 默认构造:创建一个空 map
  • std::map myMap;

  • 初始化列表(C++11 起)
  • std::map myMap = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};

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

  • 拷贝构造
  • std::map copyMap = myMap;

插入元素

向 map 中添加键值对有几种常用方法:

  • insert 方法:返回 pair,bool 表示是否插入成功
  • myMap.insert({4, "David"});

    myMap.insert(std::make_pair(5, "Eve"));

  • 下标操作符 [ ]:若键不存在则创建并默认初始化值,存在则返回引用
  • myMap[6] = "Frank";

  • emplace (C++11):原地构造,更高效
  • myMap.emplace(7, "Grace");

访问与查找元素

获取 map 中的值需注意安全性和效率:

  • 使用下标 [ ]:可读可写,但若键不存在会自动插入默认值,可能引起意外行为
  • std::string name = myMap[1];

  • 使用 at():带边界检查,键不存在时抛出 std::out_of_range 异常
  • std::string name = myMap.at(2);

  • find() 方法:推荐用于判断键是否存在
  • auto it = myMap.find(3);

    if (it != myMap.end()) { std::cout second; }

  • count() 方法:返回 0 或 1(map 键唯一)
  • if (myMap.count(4)) { /* 存在 */ }

删除元素

支持按迭代器、键或范围删除:

JoinMC智能客服
JoinMC智能客服

JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!

下载
  • erase(key):删除指定键,返回删除元素个数(0 或 1)
  • myMap.erase(1);

  • erase(iterator):删除迭代器指向元素
  • auto it = myMap.find(2);

    if (it != myMap.end()) myMap.erase(it);

  • clear():清空所有元素
  • myMap.clear();

遍历 map

map 中的元素按键升序排列,可通过迭代器或范围 for 遍历:

  • 范围 for + 结构化绑定(C++17)
  • for (const auto& [key, value] : myMap) {

      std::cout

    }

  • 传统迭代器
  • for (auto it = myMap.begin(); it != myMap.end(); ++it) {

      std::cout first second

    }

常用属性与操作

查询容器状态和大小:

  • size():元素个数
  • myMap.size();

  • empty():是否为空
  • if (myMap.empty()) { /* 无元素 */ }

  • begin()/end():首尾迭代器
  • 用于遍历或算法操作

应用实例:统计单词频次

map 常用于计数类问题,例如统计字符串中每个单词出现次数:

#include iostream>
#include
#include
#include

int main() {
  std::string text = "apple banana apple orange banana apple";
  std::map<:string int>wordCount;
  std::stringstream ss(text);
  std::string word;

  while (ss >> word) {
    ++wordCount[word];
  }

  for (const auto& pair : wordCount) {
    std::cout   }

  return 0;
}

输出:
apple: 3
banana: 2
orange: 1

基本上就这些。掌握 insert、find、erase 和遍历方法,就能高效使用 map 解决大多数键值映射问题。注意避免滥用下标访问导致意外插入,优先使用 find 或 at 更安全。

相关专题

更多
string转int
string转int

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

358

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

764

2023.08.22

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

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

198

2023.11.20

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

92

2023.09.25

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

527

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1491

2023.10.24

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

9

2026.01.23

热门下载

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

精品课程

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

共578课时 | 49.9万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

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

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