stl map容器详解
时间: 2025-04-27 10:04:24 浏览: 14
### STL `map` 容器详细介绍
#### 一、概述
`map` 是 C++ 标准模板库 (STL) 中的一种关联式容器,它存储键值对(key-value pairs),其中每个键都唯一标识一个元素。`map` 的内部实现通常基于红黑树(Red-Black Tree),这使得插入、删除和查找操作的时间复杂度均为 O(log n)[^1]。
#### 二、定义方式
要创建一个 `map` 对象,可以按照如下方式进行:
```cpp
#include <map>
std::map<KeyType, ValueType> myMap;
```
这里 `KeyType` 表示键的类型而 `ValueType` 则表示对应的值类型的对象。
#### 三、基本成员函数
##### 插入与更新
可以通过下述两种方法向 `map` 添加新条目或修改已有条目的值:
```cpp
// 方法一:使用方括号运算符 []
myMap[key] = value;
// 方法二:调用 insert 成员函数
myMap.insert(std::make_pair(key,value));
```
当给定相同的 key 调用上述任一方时会覆盖旧有的映射关系;如果希望仅在不存在该 key 才执行插入,则应采用第二种形式并检查返回的结果来确认是否成功插入[^2]。
##### 查找
为了高效定位特定项的位置,提供了多种迭代器获取手段以及布尔测试接口:
```cpp
auto it = myMap.find(someKey);
if(it != myMap.end()){
// 存在这个键
}
bool exists = myMap.count(someKey)>0;
```
另外还有 lower_bound 和 upper_bound 函数用于范围查询,它们分别指向第一个不大于指定关键字位置处及其之后的第一个大于所指关键字之处的迭代器:
```cpp
auto lb_it=myMap.lower_bound(someKey);
auto ub_it=myMap.upper_bound(someKey);
for(auto i=lb_it;i!=ub_it;++i){
std::cout<<(*i).first<<" "<<(*i).second<<"\n";
}
```
##### 删除
移除单个元素可通过 erase 来完成,支持三种不同的参数传递模式:
```cpp
size_t erasedCount = myMap.erase(someKey);
it = myMap.begin();
myMap.erase( it );
myMap.erase(startIt,endIt);
```
前两者适用于处理具体位置上的记录,后者则允许一次性清除一段连续区间内的全部项目。
#### 四、遍历
对于整个集合内所有项目的访问可借助循环语句配合 begin() 和 end() 迭代器来进行:
```cpp
for(const auto& pair : myMap){
std::cout <<pair.first <<" => " << pair.second <<'\n';
}
```
此段代码展示了如何利用增强版 for 循环优雅地打印出每一对键值组合的信息。
阅读全文
相关推荐


















