map可以理解为之中关联数组,之所以称为关联是因为map是通过键值来访问,而不是通过元素在数组中的位置来访问。
map的键类型必须满足严格弱排序,解释一下:
1.当键值与自身比较时,一定产生false结果
2.两个键不能相互小于,而且如果k1<k2, k2<k3 那么k1<k3
3.如果两个键值相互不小于,则视为相等
map定义的类型:
map::key_type;键的类型
map::mapped_type;键所关联值的类型
map::value_type;一个pair类型,pair类型就是包含两个类型的一种模板类型,这两种类型不要求相同,例如pair a;它具有两个共有数据成员,first和second。说回value_type,它的first元素具有const map::key_type类型,second元素具有const map::mapped_type类型
map的构造函数有有如下三种:
map m;//空的map,键和值类型分别为k和v
map m(m2);//初始化m为m2的副本,m2与m必须有相同的k,v类型
map m(b, e);//创建m,存储迭代器b和e标记范围内元素的副本,元素的类型必须能转换为pair类型
map提供了如下的函数,具体函数原型和用法请参阅相关技术文档,
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocaTor() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
earse函数有三种形式:
void erase( iteraTor pos );
void erase( iteraTor start, iteraTor end );
size_type erase( const KEY_TYPE &key );//返回删除元素的个数
insert函数比较特别,也比较麻烦,这里着重介绍一下。
insert函数有三种形式:
iteraTor insert( iteraTor pos, const pair &val );
插入val到pos的后面,然后返回一个指向这个元素的迭代器。
void insert( input_iteraTor start, input_iteraTor end );
插入start到end的元素到map中。
pair insert( const pair &val );
只有在val不存在时插入val。返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool值。
第三种形式特别值得注意,返回值是一个pair类型,pair.first是map::value_type类型的迭代器,pair.second是bool,表示是否插入了元素,该函数的用法将在下面程序中有详细使用和说明。
请看下面程序:
[cpp] view plaincopyprint?#include
#include