【STL】map容器
创始人
2024-04-13 15:44:26
0

map

作为关联式容器的一种,map容器存储的都是pair对象,也就是用pair类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括C++基本数据类型、使用结构体或类自定义的类型。

默认情况下,map容器选用std::less< T >排序规则(其中T表示键的数据类型),其会根据键的大小对所有键值对做升序排序。当然,根据实际情况的需要,我们可以手动指定map容器的排序规则,既可以选用STL标准库中提供的其他排序规则(比如std::greater< T >),也可=可以自定义排序规则。

使用map容器存储的各个键值对,键的值既不能重复也不能被修改。

构造方法

mapmyMap;

类似于set,可以使用这种方式创建一个空的map。此时的map中没有任何键值。

在这里插入图片描述
此外还可以进行直接初始化的创建。由于map的本质也是储存一个pair类型,因此可以直接使用pair进行初始化
在这里插入图片描述
同set一样,可以使用拷贝的方式进行构造。
在这里插入图片描述

成员方法

begin()
返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
end()
返回指向容器的最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和begin()结合使用。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
rbegin()
返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果map容器用const限定,则该方法返回的是const类型的反向双向迭代器。
rend()
返沪指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果map容器用const限定,则该方法返回的是const类型的反向双向迭代器。
find(key)
在map容器中查找键为key的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和end()方法一样的迭代器。另外,如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
lower_bound(key)
返回一个指向当前map容器中第一个大于或等于key的键值对的双向迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
upper_bound(key)
返回一个指向当前map容器中第一个大于key的键值对的迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
empty()
若容器为空,则返回true;否则返回false
size()
返回当前map容器中存有键值对的个数
operator[]
map容器重载了[]运算符,只要知道map容器中某个键值对的键的值,就可以向获取数组中元素那样,通过键直接获取对应的值。
at(key)
找到map容器中key键对应的值,如果找不到,该函数会引发out_of_range异常。
insert()
向map容器中插入键值对
erase()
删除map容器指定位置、指定键(key)值或者指定区域内的键值对。
swap()
交换2个map容器中存储的键值对,这意味着,操作的2个键值对的类型必须相同。
clear()
清空map容器中所有的键值对,即使map容器的size()为0
emplace()
在当前map容器中的指定位置处构造新键值对。其效果和插入键值对一样,但效率更高。
count(key)
在当前map容器中,查找键为key的键值对的个数并返回。注意,由于map容器中各键值对的键的值是唯一的,因此该函数的返回值最大为1

map的迭代器访问元素的方式:
itetator->first:访问键
iterator->secondfang:访问值

元素访问

map提供了两种访问元素的方式
at()
operator()
at()
at()成员方法也需要根据指定的键,才能从容器中找到该键对应的值;不同之处在于,如果在当前容器中查找失败,该方法不会向容器中添加新的键值对,而是直接抛出out_of_range异常。
在这里插入图片描述
在这里插入图片描述
operation[]
借助重载的[]运算符才能成功获取该键对应的值;反之,若当前map容器中没有包含该指定键的键值对,则此时使用[]运算符将不再是访问容器中的元素,而变成了向该map容器中添加一个键值对。其中键是指定的键,值是’
\0‘;
在这里插入图片描述
在这里插入图片描述
比较而言,[]更容易对原始数据造成干扰,以此更推荐使用at()访问成员。

multimap(了解)

map容器的区别在于,multimap容器中可以同时存储多(≥2)各键相同的键值对。
由于multimap与map有许多相似之处,此处只考虑不同之处,而不做赘述。
成员访问
和map容器相比,multimap未提供at()成员方法,也没有重载[]运算符。这意味着,map容器中通过指定键获取指定键值对的方式,将不再适用于multimap容器。其实这很好理解,因为multimap容器中指定的键可能对应多个键值对,而不再是1个。
因此它更多用来进行统计,或使用迭代器进行访问。

undered_map

无序容器,与map有很大区别
关联式容器的底层实现采用的树存储结构,更确切地说是红黑树结构
无序容器的底层实现采用的是哈希表的存储结构

由于有不同的数据结构支撑,因此有着不同的性质。
1.无序容器内部存储的键值对是无序的,各键值对的存储位置取决于该键值对中的键
2.和关联式容器相比,无序容器擅长通过指定键查找对应的值(平均时间复杂度为O(1));但对于使用迭代器遍历容器中存储的元素,无序容器的执行效率则不如关联式容器。

除此之外,它的用法和map完全一致,因此不再一一赘述。

相关内容

热门资讯

原创 “... 增值税是我国第一大税种,其纳税人覆盖绝大部分经营主体,与社会大众日常生活息息相关。12月30日,《中...
湖南以高质量涉外法律服务保障高... 近年来,中国(湖南)自贸试验区建设加快推进,中非经贸博览会、中非经贸深度合作先行区等国家级平台相继落...
山东省民办教育协会政策与法律专... 12月27日,山东省民办教育领域迎来一场极具里程碑意义的盛会,山东省民办教育协会政策与法律专家委员会...
我国将继续实施黄河休禁渔制度 记者31日从农业农村部获悉,农业农村部日前印发《关于继续实施黄河休禁渔制度的通告》,明确继续实施黄河...
下调!住房出售,最新政策来了! 12月30日,财政部、税务总局发布《关于个人销售住房增值税政策的公告》(下称《公告》),明确个人将购...
原创 欣... 《电鳗财经》电鳗号/文 欣旺达子公司因动力电池质量纠纷被诉,索赔金额高达数亿元的消息引发行业震动。...
华蓝集团:关联交易按制度审议与... 证券之星消息,华蓝集团(301027)12月30日在投资者关系平台上答复投资者关心的问题。 投资者提...
郑州银行发布诉讼事项进展 被告... 12月31日,郑州银行发布《关于诉讼事项进展的公告》称,2025年7月,郑州银行中原路支行与郑州金威...
2026年嘉兴离婚律师权威推荐... 2026年嘉兴离婚律师权威推荐:北京国樽(嘉兴)律师事务所领衔,专业离婚律师/婚姻律师/诉讼离婚律师...
厦门出台《厦门历史文化名城保护... 集美学村建筑群 12月30日,市人大常委会表决通过《厦门历史文化名城保护条例》《厦门经济特区绿色金融...