c++ map映射表

本文探讨了C++中map容器的初始化特性及其默认值行为。特别关注了如何通过find方法检查键是否存在,并讨论了自动插入键值对的机制及删除键的方法。

map<int,int> myMap;    创建一个map后是有初始值的,初始值为0;


if(myMap.find(42)!=myMap.end())   //即使myMap里没有42,但这样访问了一次以后,会自动插入一个键42到myMap,值为0

要想删掉该键值,就要使用 myMap.erase(42)

### C++ 中 `map` 和哈希表相关函数的使用 #### 1. 基本概念 在C++标准库中,提供了两种主要的地图容器用于存储键值对:有序关联容器 `std::map` 和无序关联容器 `std::unordered_map`。前者基于红黑树实现,后者则是典型的哈希表结构[^2]。 #### 2. 创建与初始化 可以采用多种方式创建并初始化这两种类型的地图: ```cpp // 初始化为空 std::map<int, int> orderedMap; std::unordered_map<int, int> unorderedMap; // 列表初始化 std::map<int, char> omap{{1,'a'},{2,'b'}}; std::unordered_map<int, char> uomap{{1,'c'},{2,'d'}}; // 复制构造 std::map<int, double> copyOfOmap(omap); ``` #### 3. 插入元素 向 `map` 或者 `unordered_map` 添加新条目非常直观: ```cpp orderedMap.insert(std::make_pair(key,value)); unorderedMap[key] = value; // 更简洁的方式 ``` 对于已经存在的键执行上述操作会覆盖旧值;如果想要避免这种情况,则应先检查是否存在该键再决定是否插入[^1]。 #### 4. 查找元素 为了安全有效地检索特定键对应的值,推荐使用 `.find()` 方法而不是直接索引运算符[]: ```cpp auto it = orderedMap.find(someKey); if (it != orderedMap.end()) { std::cout << "Found: " << (*it).second; } // 对于 unordered_map 同样适用 ``` 这种方法不仅适用于读取还支持迭代器遍历整个集合。 #### 5. 删除元素 当不再需要某些项时可以通过指定其键名来进行移除: ```cpp size_t erasedCount = orderedMap.erase(toBeRemovedKey); // 移除多个满足条件的对象(仅限 C++20 及以上版本) orderedMap.extract(range_of_keys); ``` 值得注意的是,删除单个元素返回被删去的数量,而在较新的编译环境下还可以批量处理更多情况下的节点提取。 #### 6. 遍历所有项目 最后但同样重要的一点是如何优雅地循环访问所有的键/值组合: ```cpp for(const auto& elem : orderedMap){ std::cout<<elem.first<<"->"<<elem.second<<"\n"; } ``` 这段代码展示了如何利用范围基for语句轻松完成这一任务,无论是针对顺序还是非顺序映射都有效果良好[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值