码迷,mamicode.com
首页 > 其他好文 > 详细

关联容器map的使用

时间:2019-07-01 17:04:18      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:位置   下标   ons   insert   组织   empty   不同的   成员函数   标准库   

map容器中的元素是一些关键字-值(key-value)对。map全称为有序的关键字不可重复的map,可以称之为关联数组,map通过关键字而非位置来查找值。

出了map外,还有允许关键字重复的multimap、无序的(由哈希函数组织的)关键字不可重复出现的unordered_map和无序的关键字可重复出现的unordered_multimap。

 

1 map的定义和初始化

在定义和初始化上,map和顺序容器vector并没有很大区别,甚至大多数初始化方式是一样的。

技术图片

 

2 赋值

map的赋值可以有同类型之间的赋值和初始值列表两种方式。

技术图片

 

3 map容器大小的操作

容器大小操作上与vector一样,有empty()/size()/max_size()三个成员函数的操作。

 

4 迭代器

map容器的迭代器并不想vector容器那样支持多种多样的操作,它只支持所有标准库容器的通用操作:①*iter;②iter->;③++iter;④--iter;⑤iter1 == iter2;⑥iter1 != iter2。

技术图片

1)关联容器中有三个类型别名,分别为关键字类型key_type、值类型mapped_type和键-值类型pair<const key_type, mapped_type>。对迭代器解引用时会得到value_type值的引用为pair<first, second>。

2)map的value_type是pair类型,它的first成员(关键字类型)是const类型的,不可更改,而second成员是可以修改的。

技术图片

我们使用迭代器遍历map(包括有序关联容器)时,迭代器按关键字升序遍历元素。其begin()得到的迭代器也不是指向初始化列表中的第一个元素,而是按字典序排序后的第一个元素。

 

5 添加元素

容器map添加元素的操作有insert()和emplace(),emplace()和insert()的区别在上一篇vector容器的使用中提过。

技术图片

1)insert(v) v是value_type类型的对象。只有当关键字在容器中不存在时才插入。函数返回一个pair对象,包含一个迭代器,指向插入关键字元素,和一个指示插入是否成功的bool。

2)insert(il) il是值的花括号列表,函数返回void。

3)insert(b, e) b、e是一对迭代器,函数返回void。

4)insert(p, v) 迭代器p作为从哪里开始搜索新元素应该存储位置的迭代器,v为插入元素,既可以是是value_type对象也可以是值的花括号列表。

技术图片

 

6 删除元素

map删除元素的函数为erase(),它有三个版本,其中erase(p)、erase(b, e)函数的操作与顺序容器中的相似,p、b、e都为迭代器。关联容器有其特有的earse版本,erase(k)其中k为关键字类型,函数的功能是删除关键字为k的元素,返回size_t类型,指出删除元素的数量。

技术图片

 

7 map的下标操作

map下表运算符接受一个关键字获取该关键字对应的值。与其他下表运算不同的是,如果关键字并不在map中,它会创建一个元素并插入到map中并对其关键字进行值初始化。

技术图片

技术图片

下表操作还有at(k)函数,但是当map中不存在k时at函数是抛出异常。

 

8 访问元素

除了上面的下表运算符和at()函数,map还有其他的访问元素的操作。

1)find(k) 返回指向第一个关键字为k的迭代器,若容器中不能存在k则返回尾后迭代器。

2)count(k) 返回关键字等于k的元素数量,对于map来说永远都是返回0或1。

3)lower_bound(k) 返回指向第一个关键字不小于k的元素的迭代器。

4)upper_bound(k) 返回指向第一个关键字大于k的元素的迭代器。

技术图片

 

该篇博客是自己的学习博客,水平有限,如果有哪里理解不对的地方,希望大家可以指正!

关联容器map的使用

标签:位置   下标   ons   insert   组织   empty   不同的   成员函数   标准库   

原文地址:https://www.cnblogs.com/zpchya/p/11115063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!