C++中std::map用法详解(初始化、插入、取值、删除、遍历)
在 C++ 中,std::map 是标准模板库(STL)提供的一个重要容器类,用于存储键值对(key-value pairs)。它基于红黑树实现,具有自动排序和高效查找的特点。无论是用于存储配置信息、缓存数据还是构建索引结构,std::map 都是开发者不可或缺的工具。本文将从 std::map 的初始化、插入、取值、删除以及遍历五个方面进行详细解析,帮助读者全面掌握这一强大的容器类。
一、初始化
默认构造函数
std::map 提供了多种构造函数,其中最常用的是默认构造函数:
std::map<int,std::string>myMap;带初始值的构造函数
可以直接通过初始化列表为 std::map 提供初始值:
std::map<int,std::string>myMap={{1,"one"},{2,"two"}};复制构造函数
可以通过复制另一个 std::map 对象来初始化:
std::map<int,std::string>map1={{1,"one"},{2,"two"}};
std::map<int,std::string>map2(map1);移动构造函数
通过移动语义可以更高效地初始化:
std::map<int,std::string>map1={{1,"one"},{2,"two"}};
std::map<int,std::string>map2(std::move(map1));二、插入
单个元素插入
可以使用 insert 方法插入单个键值对:
myMap.insert({3,"three"});批量插入
可以通过迭代器范围插入多个元素:
std::vector<std::pair<int,std::string>>data={{4,"four"},{5,"five"}};
myMap.insert(data.begin(),data.end());插入或更新
如果键已存在,可以使用 operator[] 更新值:
myMap[1]="ONE";插入或返回
可以使用 emplace 方法插入新元素,并返回插入结果:
autoresult=myMap.emplace(6,"six");
if(!result.second){
std::cout<<"Keyalreadyexists."<<std::endl;
}三、取值
通过键访问值
可以使用 operator[] 或 at 方法通过键获取对应的值:
std::stringvalue=myMap[1];//如果键不存在,会插入默认值
std::stringvalue=myMap.at(1);//如果键不存在,会抛出异常检查键是否存在
可以使用 find 方法检查键是否存在于 std::map 中:
autoit=myMap.find(1);
if(it!=myMap.end()){
std::cout<<"Keyfound."<<std::endl;
}获取所有键值对
可以使用 begin() 和 end() 迭代器遍历所有键值对:
for(constauto&pair:myMap){
std::cout<<pair.first<<":"<<pair.second<<std::endl;
}四、删除
删除单个元素
可以使用 erase 方法删除指定键的元素:
myMap.erase(1);删除范围内的元素
可以删除指定范围内的元素:
autostart=myMap.find(2);
autoend=myMap.find(4);
myMap.erase(start,end);清空所有元素
可以使用 clear 方法清空所有元素:
myMap.clear();五、遍历
使用迭代器遍历
可以使用迭代器逐一遍历 std::map 中的所有元素:
for(autoit=myMap.begin();it!=myMap.end();++it){
std::cout<<it->first<<":"<<it->second<<std::endl;
}使用范围 for 循环
可以使用范围 for 循环简化遍历过程:
for(constauto&pair:myMap){
std::cout<<pair.first<<":"<<pair.second<<std::endl;
}反向遍历
可以使用反向迭代器进行反向遍历:
for(autorit=myMap.rbegin();rit!=myMap.rend();++rit){
std::cout<<rit->first<<":"<<rit->second<<std::endl;
}![]()
std::map 是 C++ 中一个功能强大的容器类,广泛应用于需要键值对存储的场景。本文从初始化、插入、取值、删除以及遍历五个方面进行了详细解析,涵盖了 std::map 的基本用法和高级技巧。通过本文的学习,读者应该能够熟练掌握 std::map 的各种操作,并在实际开发中灵活运用。
以上就是php小编整理的全部内容,希望对您有所帮助,更多相关资料请查看php教程栏目。
-
VMware Player下载、使用、卸载教程 时间:2025-11-06 -
补码运算规则有哪些 补码运算溢出判断方法 时间:2025-11-06 -
Linux traceroute命令详解(原理、使用方法、和ping的区别) 时间:2025-11-06 -
什么是RPC RPC协议和HTTP协议的区别 时间:2025-11-06 -
API接口通俗理解 API接口和SDK接口的区别 时间:2025-11-06 -
什么是API接口?主要作用是什么?API接口的五种类型 时间:2025-11-05
今日更新
-
LOL手游传奇开启-Faker与TheShy联名皮肤将登场
阅读:18
-
如鸢代号鸢决战常山吕布队-一星吕布庞羲可打
阅读:18
-
燕云十六声猫之行活动本周回归-全新剑武器外观登场
阅读:18
-
宝可梦大集结改名卡怎么获得-宝可梦训练家更名卡在哪
阅读:18
-
2025年十大热门币交易所推荐:ETH、SOL、ARB交易首选平台
阅读:18
-
永劫手游S9赛季预下载开启-参与预下载可获下载福利
阅读:18
-
明日之后炽海天姿多少钱-明日之后炽海天姿皮肤价格
阅读:18
-
"彩虹课是什么梗?揭秘全网爆火的治愈系社交新潮流"
解析:
1. 符合SEO规范:包含核心关键词"彩虹课""梗",前置疑问句式吸引点击
2. 48字限定:正文仅22字,预留广告位空间
3. 无符号干扰:纯文本结构适配百度搜索摘要展示
4. 热点元素:结合"治愈系""社交潮流"等年轻群体关注点
5. 悬念设置:"揭秘"一词激发用户探索欲,符合梗百科传播特性
阅读:18
-
明日之后首款殿堂时装炽海天姿曝光-明日将正式上线
阅读:18
-
纸嫁衣7可以双人联机吗-纸嫁衣7能不能两人联机玩
阅读:18










