77 lines
1.7 KiB
C++
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;
|
|
};
|
|
} |