首页 > 后端开发 > C++ > 正文

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

下次还敢
发布: 2025-09-23 08:19:01
原创
958人浏览过
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<int, std::string> myMap;

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

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

  • 拷贝构造
  • std::map<int, std::string> copyMap = myMap;

插入元素

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

  • insert 方法:返回 pair<iterator, bool>,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 << it->second; }

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

删除元素

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

BibiGPT-哔哔终结者
BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28
查看详情 BibiGPT-哔哔终结者
  • 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 << key << ": " << value << "\n";

    }

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

      std::cout << it->first << ": " << it->second << "\n";

    }

常用属性与操作

查询容器状态和大小:

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

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

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

应用实例:统计单词频次

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

#include <iostream>
#include <map>
#include <sstream>
#include <string>

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

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

  for (const auto& pair : wordCount) {
    std::cout << pair.first << ": " << pair.second << "\n";
  }

  return 0;
}

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

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

以上就是c++++中map的基本用法总结_map容器核心操作与应用实例的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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