C++map使用方法
时间: 2025-01-09 11:36:22 浏览: 3
### C++ `map` 容器使用教程
#### 构造与初始化
可以利用默认构造函数来创建一个空的 `map` 对象。如果希望基于已有的 `map` 创建新的副本,则可调用拷贝构造函数或重载赋值运算符[^1]。
```cpp
#include <iostream>
#include <map>
// 默认构造函数实例化
std::map<int, std::string> defaultConstructed;
// 已有map对象用于复制
std::map<int, std::string> originalMap;
originalMap[1] = "one";
originalMap[2] = "two";
// 拷贝构造函数实例化
std::map<int, std::string> copyConstructed(originalMap);
// 赋值运算符实现深拷贝
std::map<int, std::string> assignedCopy;
assignedCopy = originalMap;
```
#### 插入元素
有两种主要方式向 `map` 中添加新条目:通过下标操作符(`[]`) 或者成员函数 `insert()` 方法[^3]。
```cpp
// 下标操作符插入
defaultConstructed[0] = "zero";
// insert() 函数插入单个键值对
defaultConstructed.insert(std::make_pair(4, "four"));
// 批量插入多个键值对
defaultConstructed.insert({{5,"five"}, {6,"six"}});
```
#### 访问和遍历
为了读取存储于 `map` 内的数据项,既可以采用迭代器逐一访问也可以直接索引特定位置上的记录;另外还支持正向以及逆序两种模式下的循环处理逻辑。
```cpp
for (auto it=defaultConstructed.begin(); it!=defaultConstructed.end(); ++it){
std::cout << (*it).first << ": " << (*it).second << "\n";
}
// 反向遍历
for(auto rit=defaultConstructed.rbegin(); rit != defaultConstructed.rend(); ++rit){
std::cout << (*rit).first << ": " << (*rit).second << "\n";
}
```
#### 查找功能
提供了几种不同的手段去定位指定关键字对应的映射关系——比如借助 `find()` 来获取指向目标节点的迭代器指针,或是依靠 `count()` 判断某给定 key 是否存在于此集合之中。
```cpp
if(defaultConstructed.find(4)!=defaultConstructed.end()){
std::cout << "Found element with key=4\n";
}else{
std::cout << "No such element found.\n";
}
if(defaultConstructed.count(7)>0){
std::cout << "Element exists at key=7\n";
}else{
std::cout << "There is no entry associated with this key value.\n";
}
```
#### 删除操作
当不再需要某些数据时可以通过三种途径移除它们:一是依据具体的位置信息执行清除动作;二是按条件筛选一批满足要求的对象统一销毁;三是清空整个表结构内的全部内容。
```cpp
// 移除单一元素
defaultConstructed.erase(4);
// 清理范围区间内所有符合条件的项目
defaultConstructed.erase(defaultConstructed.lower_bound(2), defaultConstructed.upper_bound(5));
// 彻底释放资源
defaultConstructed.clear();
```
#### 排序特性
值得注意的是,默认情况下 `map` 是按照升序自动整理内部各组件之间的顺序关系。然而用户也能够自定义比较准则从而改变这种布局形式,例如构建降序排列的地图容器[^2]。
```cpp
// 自定义比较规则建立降序序列化的map
std::map<int,std::string,std::greater<int>> descendingOrderMap;
descendingOrderMap[9]="nine";
descendingOrderMap[8]="eight";
descendingOrderMap[7]="seven";
// 输出结果展示其为递减趋势
for(const auto& item : descendingOrderMap){
std::cout<<item.first<<"="<<item.second<<"\n";
}
```
阅读全文