数据结构关联式容器map和set的模拟实现
Posted zhaocx111222333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构关联式容器map和set的模拟实现相关的知识,希望对你有一定的参考价值。
红黑树模拟实现.
map
主要的问题就在map的[]operator
重载:
map的[]重载.
//map的实现
template<class K, class T>
class Map{
struct MapKeyOfValue{
const K& operator()(const pair<K, T>& val){
return val.first;
}
};
public:
typedef typename RBTree<K, pair<K, T>, MapKeyOfValue>::iterator iterator;
//封装insert接口
pair<iterator, bool> insert(const pair<K, T>& kv){
return _rbt.insert(kv);
}
iterator begin(){
return _rbt.begin();
}
iterator end(){
return _rbt.end();
}
iterator rbegin(){
return _rbt.rbegin();
}
//map的[]重载,返回pair的second的值
T& operator[](const K& key){
pair<iterator, bool> ret = _rbt.insert(make_pair(key, T()));
return ret.first->second;
}
private:
typedef RBTree<K, pair<K, T>, MapKeyOfValue> rbt;
rbt _rbt;
};
set
template<class K>
class Set{
struct SetKeyOfValue{
const K& operator()(const K& val){
return val;
}
};
public:
typedef typename RBTree<K, K, SetKeyOfValue>::iterator iterator;
//封装insert接口
pair<iterator, bool> insert(const K& k){
return _rbt.insert(k);
}
iterator begin(){
return _rbt.begin();
}
iterator end(){
return _rbt.end();
}
iterator rbegin(){
return _rbt.rbegin();
}
private:
typedef RBTree<K, K, SetKeyOfValue> rbt;
rbt _rbt;
};
写一个测试
Map<int, int> m;
m.insert(make_pair(5, 5));
m.insert(make_pair(3, 5));
m.insert(make_pair(2, 5));
m.insert(make_pair(1, 5));
m.insert(make_pair(4, 5));
m.insert(make_pair(4, 5));
Map<int, int>::iterator it = m.begin();
while (it != m.end()){
cout << it->first << " " << it->second << endl;
++it;
}
以上是关于数据结构关联式容器map和set的模拟实现的主要内容,如果未能解决你的问题,请参考以下文章
[C/C++]详解STL容器9-基于红黑树模拟实现map和set
[C/C++]详解STL容器9-基于红黑树模拟实现map和set
[C/C++]详解STL容器9-基于红黑树模拟实现map和set