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

map 是 C++ STL 中一种非常实用的关联容器,用于存储键值对(key-value pairs),其中每个键唯一且自动排序。它基于红黑树实现,查找、插入和删除操作的时间复杂度为 O(log n),适合需要快速查找和有序遍历的场景。
map 可以通过多种方式创建和初始化:
std::map<int, std::string> myMap;
std::map<int, std::string> myMap = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};
立即学习“C++免费学习笔记(深入)”;
std::map<int, std::string> copyMap = myMap;
向 map 中添加键值对有几种常用方法:
myMap.insert({4, "David"});
myMap.insert(std::make_pair(5, "Eve"));
myMap[6] = "Frank";
myMap.emplace(7, "Grace");
获取 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)) { /* 存在 */ }
支持按迭代器、键或范围删除:
myMap.erase(1);
auto it = myMap.find(2);
if (it != myMap.end()) myMap.erase(it);
myMap.clear();
map 中的元素按键升序排列,可通过迭代器或范围 for 遍历:
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";
}
查询容器状态和大小:
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容器核心操作与应用实例的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号