作业要求
- 这次大作业要求实现与 C++ 标准库类似的数据结构 map,包括迭代器等。框架接口在已本仓库中给出,只需要实现
.hpp
文件内所要求的内容即可。 - B班实现可以 AVL 树、AA 树、红黑树三选一,A 班实现红黑树。
- 你需要完成下发文件中的作业代码,在 OJ 上面提交
map.hpp
,要求可以实现 map 的基本操作,并且具有一定的鲁棒性。 - Bonus: 在测试数据中有一些
type_traits
的测试,感兴趣可以尝试。具体的工作以及计分方法尚未确定,后续可能会有更新。 - 在本作业中,只允许使用
cstdio
,cstring
,iostream
,cmath
,string
五个 C++ 标准库,如需使用其他功能请自行实现。 - 我们会检查内存泄漏,如果还不会测内存泄漏,可以看教程如何检测内存泄漏?
下发文件
data directory
: 测试源码和正确输出map.hpp
: 提供接口,完成TODO
部分代码,请不要随意改动接口,否则会导致测评代码不能正确调用你的文件。exception.hpp
utility.hpp
: 保证测试在本地正确运行的相关代码,请不要随意改动。- 最终 OJ 测试仅仅需
map.hpp
。
实现细节
可能需要注意的细节:
- 在测试点中,有一些类并不具有默认构造函数,所以直接使用
T* p=new T[...];
可能会出现问题。 - 你的程序将会受到一定程度的鲁棒性检测
分数构成
- 总得分 = 80%(OJ 测试部分) + 20%(code review)=80%(OJ 测试部分) + 16% (基础问题) + 4% (Bonus)
- 注意事项:
- 使用普通的二叉搜索树完成此题,最终得分为:0.4*以上得分
- 使用非二叉搜索树、以及要求的算法外的方法完成此题,最终得分为:0.7*以上得分
- 关于 Bonus: 可以是对容器或者迭代器的某个行为的优化,type_traits 相关应用或其他有创意的想法,在 code review 时展示即可(本部分后续会有更新,可能涉及具体工作的改变)
- 学术诚信问题:如果在 CR 时,发现有任何违规行为(包括但不限于使用其它头文件、使用非常规方法通过测试点),你最终的得分都有可能为 0 分。
截止日期
作业时间为三周,即 ddl 设在第八周周日上机课之前(4月14号 18:30),大家合理安排时间完成~