STL map mutimap

1.概念: set是一个映射容器他不是序列容器而是一个相关容器,也就是迭代器的移动并不是线性的。而且这里的map是采用二叉树做物理存储的。这棵二叉树是一个排序二叉树也就是在中序遍历时是按 〈运算排列的。同时map中是没有重复的元素的。因为map是一个个相关容器, 其容器中的所有元素都是由 {Key, Value}组成。而且在map中Key必须是唯一的。整个容器是按Key的 谓词比较运算排序的。




2.迭代器
   map的迭代器跟set一样.但唯一不同的是*运算符得到的是一个pair而不是一个值.所以map中的迭代器不能跟map以外的任何迭代器联合使用.


3.对的结构


template<class _T1, class _T2> struct pair {
typedef _T1 first_type;
typedef _T2 second_type;
pair()
: first(_T1()), second(_T2()) {}
pair(const _T1& _V1, const _T2& _V2)
: first(_V1), second(_V2) {}
template<class U, class V> pair(const pair<U, V> &p)
: first(p.first), second(p.second) {}
_T1 first;
_T2 second;
};
template<class _T1, class _T2> inline
bool __cdecl operator==(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (_X.first == _Y.first && _X.second == _Y.second); }
template<class _T1, class _T2> inline
bool __cdecl operator!=(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (!(_X == _Y)); }
template<class _T1, class _T2> inline
bool __cdecl operator<(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (_X.first < _Y.first ||
!(_Y.first < _X.first) && _X.second < _Y.second); }
template<class _T1, class _T2> inline
bool __cdecl operator>(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (_Y < _X); }
template<class _T1, class _T2> inline
bool __cdecl operator<=(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (!(_Y < _X)); }
template<class _T1, class _T2> inline
bool __cdecl operator>=(const pair<_T1, _T2>& _X,
const pair<_T1, _T2>& _Y)
{return (!(_X < _Y)); }
template<class _T1, class _T2> inline
pair<_T1, _T2> __cdecl make_pair(const _T1& _X, const _T2& _Y)
{return (pair<_T1, _T2>(_X, _Y)); }






5.map的定义


template <
   class Key,    //键类型
   class Type,   //键值类型
   class Traits = less<Key>, 
   class Allocator=allocator<pair <const Key, Type> > 
>
class map


//注意这里的value_type的定义
typedef pair<const _K, _Ty> value_type;






4.map的删除和添加(可以参考set,multiset)


pair <iterator, bool> insert(
   const value_type& _Val     //这里应该是一个pair对,返回的迭代也是一个pair对


);  //函数返回一个对,意义跟set一样
iterator insert(
   iterator _Where,
   const value_type& _Val
);
template<class InputIterator>
   void insert(
      InputIterator _First,
      InputIterator _Last
   );




//这是也是执行插入操作.
Type& operator[](
   const Key& _Key
);






iterator erase(
   iterator _Where
);
iterator erase(
   iterator _First,
   iterator _Last
);
size_type erase(
   const key_type& _Key  //删除指定的键下的所有元素
);










5.map的特定函数

你可能感兴趣的:(map,STL)