简单了解了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);
}
};本文出自 “零蛋蛋” 博客,谢绝转载!
原文:http://lingdandan.blog.51cto.com/10697032/1837435