82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "RBTree.hpp"
|
|
|
|
namespace Lenyiin
|
|
{
|
|
// Map 容器的实现,依赖于红黑树
|
|
template <class K, class V>
|
|
class Map
|
|
{
|
|
// 用于从节点中获取键值的仿函数
|
|
struct MapKeyOfT
|
|
{
|
|
const K& operator()(const std::pair<K, V>& kv)
|
|
{
|
|
return kv.first; // 返回键作为红黑树的比较依据
|
|
}
|
|
};
|
|
|
|
public:
|
|
// 定义迭代器类型,支持遍历和访问集合中的元素
|
|
typedef typename RBTree<K, std::pair<K, V>, MapKeyOfT>::iterator iterator;
|
|
typedef typename RBTree<K, std::pair<K, V>, 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<iterator, bool> Insert(const std::pair<K, V>& 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<iterator, bool> ret = _tree.Insert(std::make_pair(key, V()));
|
|
return ret.first->second;
|
|
}
|
|
|
|
// 校验红黑树的合法性
|
|
bool IsRBTree()
|
|
{
|
|
return _tree.IsRBTree();
|
|
}
|
|
|
|
private:
|
|
RBTree<K, std::pair<K, V>, MapKeyOfT> _tree;
|
|
};
|
|
} |