简单了解了set、map的框架和接口
set
//所有元素都会根据键值进行排序,set不允许有两个相同的键值 //不能通过迭代器对set的元素进行修改,set的键值即实值,实值即键值,底层为const //set使用红黑树的insert_unique(),mutilset才能使用insert_equal() //关联式容器进行查找时最好使用其自己提供的find,而不是STL算法find template<class T1, class T2> struct Pair { T1 first; T2 second; Pair() :first(T1()) , second(T2()) {} Pair(const T1& a, const T2& b) :first = a , second = b {} }; template<class K,class Compare=Less<K>,class Alloc=alloc>//缺省采用递增排序 class Set { private: template<class T> struct Identity :public UnaryFunction<T, T>//unary_function<T, T>定义于<stl_function.h> { const T& operator(const T& x)const return x; }; typedef RBTree<K, V, Identity<V>, Compare, Alloc> RepType; RepType t;//用红黑树来表示set public: typedef typename RepType::ConstIterator Iterator;//表示无法通过set的迭代器进行修改 typedef K ValueType; public: Iterator Begin(); Iterator End(); void Clear(); bool Empty()const; size_t Count(const K& key); size_t Size()const; void Swap(Set<K,Compare,Alloc>& s); Pair<Iterator,bool> Insert(const K& key); Iterator Insert(Iterator pos,const K& key); template<class InputIterator> void Insert(InputIterator first,Iterator last); size_t Erase(const K& key); void Erase(Iterator pos); void Erase(Iterator first,Iterator last); Iterator Find(const K& key)const; };
Map
//map的所有元素都是pair,pair的第一元素称为键值,第二元素称为实值 //map会根据其键值进行排序,不允许两个相同的键值 //map不可以通过迭代器修改其键值,但可以修改其实值 template<class T1,class T2> struct Pair { T1 first; T2 second; Pair() :first(T1()) , second(T2()) {} Pair(const T1& a, const T2& b) :first = a ,second = b {} }; template<class K,class T, class Compare = Less<K>, class Alloc = alloc>//缺省采用递增排序 class Map { private: typedef RBTree<K, V, Selectlst<V>, Compare, Alloc> RepType; RepType t;//以红黑树表现Map typedef Map<K, T, Compare, Alloc> Self; public: typedef Pair<const K, T> ValueType; typedef typename RepType::Iterator Iterator;//它不像Set一样将迭代器定义为ConstIterator public: Iterator Begin(); Iterator End(); size_t Count(const T& x)const; bool Empty()const; size_t Size()const; void Swap(Self& m); void Clear(); Pair<Iterator, bool> Insert(const ValueType& value); Iterator Insert(Iterator pos,const ValueType& value);//Position of the first element to be compared for the insertion operation. template<class InputIterator> void Insert(InputIterator first, InputIterator last); size_t Erase(const K& key); void Erase(Iterator pos); void Erase(Iterator first, Iterator last); Iterator Find(const K& key); T& operator[](const K& key) { return ((*(Insert(ValueType(key, T()))).first).second); } };
时间: 2024-10-10 05:22:02