Set_Map/Windows_Set_Map/Set.hpp

77 lines
1.7 KiB
C++

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