## 作业要求

- 这次大作业要求实现与 C++ 标准库类似的数据结构 map，包括迭代器等。框架接口在已本仓库中给出，只需要实现`.hpp`文件内所要求的内容即可。
- B班实现可以 AVL 树、AA 树、红黑树三选一，A 班实现红黑树。
- 你需要完成下发文件中的作业代码，在 OJ 上面提交`map.hpp`，要求可以实现 map 的基本操作，并且具有一定的鲁棒性。
- Bonus: 在测试数据中有一些`type_traits`的测试，感兴趣可以尝试。具体的工作以及计分方法尚未确定，后续可能会有更新。
- 在本作业中，只允许使用`cstdio`，`cstring`，`iostream`，`cmath`，`string`五个 C++ 标准库，如需使用其他功能请自行实现。
- 我们会检查内存泄漏，如果还不会测内存泄漏，可以看教程[如何检测内存泄漏？](./tutorials/detect-memory-leak/detect-memory-leak.md)

## 下发文件

- `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)
- **注意事项：**
  1. 使用普通的二叉搜索树完成此题，最终得分为：0.4\*以上得分
  2. 使用非二叉搜索树、以及要求的算法外的方法完成此题，最终得分为：0.7\*以上得分
- **关于 Bonus：** 可以是对容器或者迭代器的某个行为的优化，type_traits 相关应用或其他有创意的想法，在 code review 时展示即可（本部分后续会有更新，可能涉及具体工作的改变）
- **学术诚信问题**：如果在 CR 时，发现有任何违规行为（包括但不限于使用其它头文件、使用非常规方法通过测试点），你最终的得分都有可能为 0 分。
## 截止日期

作业时间为三周，即 ddl 设在第八周周日上机课之前(4月14号 18:30)，大家合理安排时间完成~