1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| template <class K, class V> class Map { public: struct MapKeyOfValue { const K& operator()(const pair<K, V>& value) { return value.first; } };
typedef typename RBTree<K, pair<K, V>, MapKeyOfValue>::iterator iterator;
iterator begin() { return _rbt.begin(); }
iterator end() { return _rbt.end(); }
bool empty() { return _rbt->empty(); }
size_t size() { return _rbt.size(); }
pair<iterator, bool> insert(const pair<K, V>& value) { return _rbt.insert(value); }
V& operator[](const K& key) { pair<iterator, bool> ret = _rbt.insert(make_pair(key, V())); return ret.first->second; }
iterator find(const K& key) { return _rbt.Find(pair<K, V>(key, V())); }
private: RBTree<K, pair<K, V>, MapKeyOfValue> _rbt; };
template <class K> class Set { struct SetKeyOfValue { const K& operator()(const K& key) { return key; } }; public: typedef typename RBTree<K, K, SetKeyOfValue>::iterator iterator; iterator begin() { return _rbt.begin(); }
iterator end() { return _rbt.end(); }
bool empty() { return _rbt.empty(); }
iterator find(const K& key) { return _rbt.Find(key); }
size_t size() { return _rbt.size(); }
pair<iterator, bool> insert(const K& key) { return _rbt.insert(key); } private:
RBTree<K, K, SetKeyOfValue> _rbt; };
|