map的底層結構就是紅黑樹,因此在map中直接封裝一棵紅黑樹,然後將其他接口包裝
/////map的模擬實現
namespace bit
{
template<class k,classv>
class map
{
typedef pai<k, v> ValueType;
//該內部類的作用是:將value中的key提取出來
struct KeyOfValue
{
constk& operator()(const ValueType& v)
{
return v.first;
}
};
typedef RBTree<k, ValueType, KeyOfValue> RBTree;
public:
typedef typename RBTree::Iterator Iterator;
public:
map()
{}
////Iterator
Iterator Begin()
{
return _t.Begin();
}
Iterator End()
{
return _t.End();
}
////Capacity
size_t Size()const
{
return _t.Size();
}
bool Empty()const
{
return _t.Empty();
}
//Acess
v& operator[](const k& key)
{
return (*(_t.Insert(ValueType(key, v()))).first).second;
}
const v& operator[](const k& key)const
{
return (*(_t.Insert(ValueType(key, v()))).first).second;
}
//modify
pair<Iterator, bool>Insert(const ValueType& data)
{
return _t.Insert(data);
}
void Clear()
{
_t.Clear();
}
Iterator Find(const k& key)
{
return _t.Find(key);
}
private:
RBTree _t;
};
}
set的模擬實現
set的底層爲紅黑樹,因此只需在set內部封裝一棵紅黑樹,即可將該容器實現出來。
//set的模擬實現
namespace bit
{
template<class k>
class set
{
typedef k ValueType;
//該內部類的作用是:將value中的key提取出來
struct KeyOfValue
{
const k& operator()(const ValueType& key)
{
return key;
}
};
//紅黑樹類型重命名
typedef RBTree<k, ValueType, KeyOfValue> RBTree;
public:
typedef typename RBTree::Iterator Iterator;
public:
set()
{
//Iterator
Iterator Begin()
{
return _t.Begin();
}
Iterator End()
{
return _t.End();
}
// Capacity
size_t Size()const
{
return _t.Size();
}
bool Empty()const
{
return _t.Empty();
}
// modify
pair<Iterator, bool> Insert(const ValueType& data)
{
return _t.Insert(data);
}
void Clear()
{
_t.Clear();
}
Iterator Find(const K& key)
{
return _t.Find(key);
}
}
private:
RBTree _t;
};
}