【CMU 15-445】Proj0 C++ Primer

文章概述了在CMU-15445项目中实现的四个技术任务:Copy-On-WriteTrie的数据结构及其操作,使用Trie构建并发Key-ValueStore,Debugging遇到的问题及解决方案,以及SQLStringFunctions的简单实现。作者通过这些任务学习了C++编程和相关技术细节。

CMU-15445汇总
本文对应的project版本为CMU-Spring-2023的project0
默认读者已经学会了字典树Trie

Task1 Copy-On-Write Trie

Task1要求实现一个可持久化字典树,可持久化字典树的定义大概就是,每次更改操作(Put或者Remove)都会生成一个新的字典树版本,并保留历史版本,且各版本间的查询操作不相互影响。
按照文档要求,我们主要实现Trie类中的三个方法:

  • const T* Get(std::string_view key) const
  • Trie Put(std::string_view key, T value) const
  • Trie Remove(std::string_view key) const

对于Get方法,比较简单,就是普通的字典树查询而已,顺着树往下走到节点处,取出值即可。
对于Put方法,相对复杂一点。假设key的长度为n,那么需要新建出n + 1个结点(包括一个新根),我的具体做法是从原始的根开始,在旧的树上沿着key的每个字符往下走,走到某个结点时,复制这个结点(包括该结点的children_指针),并修改上一个复制结点的children_(如果有上一个的话,即当前复制结点不为根)。举个例子,假设当前的字符为c,上一个复制出来的结点为A,当前复制出来的结点为

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值