Set_Map/Windows_Set_Map/Map.hpp

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;
};
}