#pragma once #include "RBTree.hpp" namespace Lenyiin { // Set 容器的实现,依赖于红黑树 template class Set { // 用于从节点中获取键值的仿函数 struct SetKeyOfT { const K& operator()(const K& k) { return k; } }; public: // 定义迭代器类型,支持遍历和访问集合中的元素 // 这里RBTree::iterator还没有实例化, 系统找不到, typename告诉编译器现在先不着急找 typedef typename RBTree::iterator iterator; typedef typename RBTree::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 K& key) { return _tree.Insert(key); } // 删除元素,返回是否删除成功 bool Erase(const K& key) { return _tree.Erase(key); } // 查找元素,返回指向该元素的迭代器 iterator Find(const K& key) { return _tree.Find(key); } // 校验红黑树的合法性 bool IsRBTree() { return _tree.IsRBTree(); } private: // 底层红黑树实例 RBTree _tree; }; }