默认的仓库已经是后续(2023fall/2024spring)的版本了,在tags里选择2022fall版本
前置知识上,写过C++基本就行,额外补充两个特性的知识
https://www.geeksforgeeks.org/unique_ptr-in-cpp/?ref=ml_lbp
https://www.geeksforgeeks.org/std-shared_mutex-in-cpp/
实现要点
并发控制的实现上
加入一个mutex互斥锁变量
在写时声明unique_lock
读时声明shared_lock
InsertChildNode传入的是TrieNode &&,需要转换一下
从unique_ptr* 到 TrieNode &&的转换过程
递归Remove只上锁一次
编程规范上要求禁止隐式bool转换
!child -> child == nullptr
删除逻辑上只有一个节点既不包含值也不含子节点时移除这一节点,删除时一般只删值。(比如删除aa键,如果存在aaa键,就只能删除aa键的值,不然下次GetValue无法达到aaa键。)
递归的key可以使用string_view避免拷贝,比如2023fall的实验就是这么做的,这里也可以复用key然后传入结束的index。
结果图