数据结构关联式容器map和set的模拟实现
Posted zhao111222333444
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