C++ map 详解(附用例)

在这里插入图片描述
C++ std::map 是一个关联容器,建立关键字(key)与值(value)的一一映射关系,以便简单高效地进行数据检索。

它是 C++容器 的一部分,可在 cppreference 找到。

std::vector(连续存储容器)、std::list 、std::array 和 std::deque 都是序列容器,大家想必都了解。

所以,我们先使用 std::map 构建一个示例。

Incredibuild 的变更日志中记录了其系统的更新轨迹。假设我们现在需要创建一个数据结构来建立这个变更日志的模型,你可能会根据链接中的内容做出一些预测。

在这里插入图片描述模型中必须有的节点信息包括:

  • 版本号
  • 发布日期
  • 变更日志文本

变更日志是按时间线性排列的。不过,当我需要检索几个月前的变更日志时,比如 4.5 版,我必须按顺序查遍列表,这种方法的效率显然很低。所以,我需要一种更加高效的方法,来快速定位所需的信息。这个问题很适合用 C++ map 解决。

如果我将此数据结构更改为以版本号为关键字,其他两个数据为值的 map。

#include <map>

#include <string>

#include <chrono>




using date = std::chrono::time_point<std::chrono::steady_clock>;




std::map<std::string, std::pair<date, std::string>> changelog;

这个数据结构现在看起来如何?不再是线性结构,而是变成了树形结构(C++ map 存储为一棵红黑树,这是库编写器的一个特点)

在这里插入图片描述如何加快检索速度?检索不再是一个接一个地直线搜索,而是根据红黑树的结构,使用最快的捷径路线,直接定位。具体可参考下面的动画演示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值