c++函数之map函数

map 是 C++ 标准库中的一个关联容器,它存储的元素都是键值对(key-value pair),并且允许基于键(key)快速访问单个元素。在 map 中,键是唯一的,而值可以是任何数据类型。map 内部通常实现为一个平衡二叉搜索树(如红黑树),因此它允许对键进行对数时间复杂度的查找、插入和删除操作。

以下是 map 的一些基本特点和使用方法:

特点

  1. 键唯一性map 中的每个键都是唯一的,尝试插入具有相同键的新元素将替换旧元素的值。
  2. 自动排序map 中的元素默认按照键的升序排列。
  3. 动态大小map 可以动态地增长和缩小,以适应存储的元素数量。

使用方法

包含头文件
 

cpp复制代码

#include <map>
创建 map
 

cpp复制代码

std::map<KeyType, ValueType> myMap;

其中 KeyType 是键的类型,ValueType 是值的类型。

插入元素
 

cpp复制代码

myMap[key] = value; // 如果键不存在,则插入新元素;如果键存在,则更新对应的值

或者

 

cpp复制代码

myMap.insert(std::pair<KeyType, ValueType>(key, value));

或者使用 make_pair 函数

 

cpp复制代码

myMap.insert(std::make_pair(key, value));
访问元素
 

cpp复制代码

ValueType& value = myMap[key]; // 通过键访问值,如果键不存在,则插入新元素(键为默认值,值为 ValueType 的默认值)

或者

 

cpp复制代码

std::map<KeyType, ValueType>::iterator it = myMap.find(key);
if (it != myMap.end()) {
ValueType& value = it->second; // 如果找到了键,则访问对应的值
} else {
// 键不存在
}
删除元素
 

cpp复制代码

size_t numErased = myMap.erase(key); // 删除键为 key 的元素,返回被删除的元素数量(0 或 1)

或者通过迭代器删除

 

cpp复制代码

std::map<KeyType, ValueType>::iterator it = myMap.find(key);
if (it != myMap.end()) {
myMap.erase(it); // 删除迭代器指向的元素
}
遍历元素
 

cpp复制代码

for (const auto& kv : myMap) { // 使用范围 for循环遍历所有元素
KeyType key = kv.first;
ValueType value = kv.second;
// 处理键和值...
}

或者使用迭代器

 

cpp复制代码

for (std::map<KeyType, ValueType>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
KeyType key = it->first;
ValueType value = it->second;
// 处理键和值...
}

注意事项

  • 当使用 myMap[key] 访问元素时,如果 map 中不存在该键,则会插入一个默认构造的元素。如果你只是想检查键是否存在,而不希望插入新元素,应该使用 find 方法。
  • map 的键类型通常需要支持比较操作(如 <),以便容器能够排序和查找元素。标准库为内置类型(如 intstd::string 等)提供了比较操作,对于自定义类型,你需要定义比较函数或重载比较运算符。

通过 map,你可以方便地存储和查找键值对,而不需要自己实现复杂的查找算法或维护排序的数据结构。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值