#pragma once #include "RBTree.hpp" namespace Lenyiin { // Map 容器的实现,依赖于红黑树 template class Map { // 用于从节点中获取键值的仿函数 struct MapKeyOfT { const K& operator()(const std::pair& kv) { return kv.first; // 返回键作为红黑树的比较依据 } }; public: // 定义迭代器类型,支持遍历和访问集合中的元素 typedef typename RBTree, MapKeyOfT>::iterator iterator; typedef typename RBTree, MapKeyOfT>::const_iterator const_iterator; // 返回指向第一个元素的迭代器 iterator begin() { return _tree.begin(); } // 返回指向尾后位置的迭代器 iterator end() { return _tree.end(); } // const 版本的迭代器 const_iterator begin() const { return _tree.begin(); } const_iterator end() const { return _tree.end(); } // 插入元素,返回插入结果 std::pair Insert(const std::pair& kv) { return _tree.Insert(kv); } // 删除元素,返回是否删除成功 bool Erase(const K& key) { return _tree.Erase(key); } // 查找元素,返回指向该元素的迭代器 iterator Find(const K& key) { return _tree.Find(key); } // [] 下标运算符 V& operator[](const K& key) { std::pair ret = _tree.Insert(std::make_pair(key, V())); return ret.first->second; } // 校验红黑树的合法性 bool IsRBTree() { return _tree.IsRBTree(); } private: RBTree, MapKeyOfT> _tree; }; }