数据结构关联式容器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

[C/C++]详解STL容器9-基于红黑树模拟实现map和set

C++进阶---Map和Set使用及模拟实现

树形结构关联式容器(map和set,multiset和multimap)