C++学习笔记 <map>
C++中关联数组是一种内部类型,也被称为映射(map)
一个map就是一个(关键吗,值)的对偶序列,他提供基于关键码的快速提取操作
map的关键吗具有唯一性
map提供双向迭代器
map的关键吗要提供一个小于操作,保持自己元素的有序性, 迭代通过map时,是按顺序的
一个map就是一个pair<const Key,mapped_type>的一个序列,mapped_type表示映射值的类型
pair本身是一个标准库类,默认情况下,pair将被用其元素类型的默认值进行初始化。如果一个类型没有默认构造函数,要将他作为pair的元素时,就必须显示提供创建pair的参数
下标:
map的特征操作就是采用下表运算符提供的关联查找。
将关键吗作为下标执行查找,并返回对应的值,如果不存在该关键码,就将一个具有该关键码和mapped_type类型默认值的pair插入到map。
不能对const map做下标查找 只有mapped_type有默认值时才能进行下标查找
映射操作:
iterator find(key); //找关键码为key的元素,如果不存在返回m.end()
count(key); //找关键吗为key的元素个数
lower_bound(key); //找第一个关键码为key的元素
upper_bound(key); //找第一个关键码大于key的元素
equal_range(key); //返回一个pair(iterator,iterator)
表操作:
将一个值放入关联容器的最方便方式就是使用下标操作直接赋值
m["a"]=12;
也可以通过insert()直接插入项目,或者通过erase()删除其中的项目
pair<iterator,bool> insert(const value_type& val); //插入(关键码,值)对
iterator insert(iterator pos,const value_type& val); //pos只是个提示
template <class In> void insert(In first,In last); //从序列中插入
void erase(iterator pos); //删除被指元素
size_type erase(const key_type& k); //删除关键码为k的元素
void erase (iteraror first,iterator last); //删除一个区间
void clear(); //删除所有元素
m.insert(value_type& pair); //返回一个pair(iterator,bool),iteartor是pair插入后(或已存在)的迭代器
* []不只是insert()的一种方便表述形式。 m[k]的结果等价于 (*(m.insert(makepair(k,V())).first)).second ,V()是映射类型的默认值。
首先创建一个pair(k,V()) 然后调用insert(pair) 得到insert()返回的迭代器,找到该迭代器所指向元素的值
当erase()的参数是关键字时返回的是删除元素的个数
如:int count = m.erase("Ratbert");
其他函数:
size_type size() const;
size_type max_size() const; //map最大可能规模
bool empty() const{return size()==0 ;}
void swap(map&);
map 还提供了 ==、!=、<、>、<=、>=、 swap() 都是非成员函数