
map 是 C++ STL 中一种非常实用的关联容器,用于存储键值对(key-value pairs),其中每个键唯一且自动排序。它基于红黑树实现,查找、插入和删除操作的时间复杂度为 O(log n),适合需要快速查找和有序遍历的场景。
构造与初始化map 可以通过多种方式创建和初始化:
- 默认构造:创建一个空 map
- 初始化列表(C++11 起)
- 拷贝构造
std::map<int, std::string> myMap;
std::map<int, std::string> myMap = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};
std::map<int, std::string> copyMap = myMap;
向 map 中添加键值对有几种常用方法:
- insert 方法:返回 pair<iterator, bool>,bool 表示是否插入成功
- 下标操作符 [ ]:若键不存在则创建并默认初始化值,存在则返回引用
- emplace (C++11):原地构造,更高效
myMap.insert({4, "David"});
myMap.insert(std::make_pair(5, "Eve"));
myMap[6] = "Frank";
myMap.emplace(7, "Grace");
获取 map 中的值需注意安全性和效率:
- 使用下标 [ ]:可读可写,但若键不存在会自动插入默认值,可能引起意外行为
- 使用 at():带边界检查,键不存在时抛出 std::out_of_range 异常
- find() 方法:推荐用于判断键是否存在
- count() 方法:返回 0 或 1(map 键唯一)
std::string name = myMap[1];
std::string name = myMap.at(2);
auto it = myMap.find(3);
if (it != myMap.end()) { std::cout << it->second; }
if (myMap.count(4)) { /* 存在 */ }
支持按迭代器、键或范围删除:
- erase(key):删除指定键,返回删除元素个数(0 或 1)
- erase(iterator):删除迭代器指向元素
- clear():清空所有元素
myMap.erase(1);
HyperWrite
AI写作助手帮助你创作内容更自信
54
查看详情
auto it = myMap.find(2);
if (it != myMap.end()) myMap.erase(it);
myMap.clear();
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():元素个数
- empty():是否为空
- begin()/end():首尾迭代器
myMap.size();
if (myMap.empty()) { /* 无元素 */ }
用于遍历或算法操作
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容器核心操作与应用实例的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: word app ai c++ ios apple 键值对 排列 String if count for while include const auto 字符串 bool int map 算法 word 大家都在看: 怎样用C++实现文件内容追加写入 ofstream打开模式ios::app详解 如何用C++追加内容到现有文件?ios::app模式解析 C++井字棋AI实现 简单决策算法编写 如何为C++搭建边缘AI训练环境 TensorFlow分布式训练配置 怎样用C++开发井字棋AI 简单决策算法实现方案






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。