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的特定函数