数据结构关联式容器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的模拟实现的主要内容,如果未能解决你的问题,请参考以下文章

手撕STLmap和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

手撕STLmap和set