C++ 头文件系列(map)

简介

该头文件包含两单概念一般之器皿—-mapmultimap
而立即有限只容器反映的定义就是 映射

旋即有限只容器 相同 的特性有:

  • 关联性
  • 映射
  • 动态增长
  • 键(Key)唯一性

这两个不相同的性是:

  • 投关系

C++ 1

容器类

既然说交关联性容器,自然得说说标准库的容器类。
C++库容器主要会分成以下几近似:

  1. 序列性容器:
    将存储对象团伙成线性模型,使用户能够如线性数组那样存取。
  2. 关联性容器: 将积存内容以键(Key)相关联 ,通过键来存取内容。
  3. 滥序容器: 存储对象因乱序存储,不有所顺序。
  4. 容器适配器: 通过适配的办法贯彻,内部使用的是外已经部分容器。

map

map为单映射容器,所谓单映射,就是一对一辉映的意。 每种信息都因
键 -> 值 的款式为储存,由 映射到
,这是此类容器与vector等容器最可怜之不等。

实现

典型的map是以Binary Search
Tree实现的,但为有或以外适当的数据结构。 例如sgi
stl使用的就是吉黑树。

operator [ ]

除外迭代器,存取map元素时行使的较多的虽是以此运算符了。
但实际上这个函数的语义不像看上去那么粗略,这第一是以这函数对特别状况的拍卖非常罕见(相比而言,C++11剧增的at成员函数就比较符合健康逻辑)。
函数传一个键k:

比方键k在map中,函数返回k映射的内容值;

设键k不在map中,那么函数会插入一个初的键值对,对插入的价值进行默认构造,并且返回这个值得引用

Observers

此地有些许单特别之函数,它们当C++标准文档里被成为Observers(可能是盖经过这半单函数能够自然程度及的体察键值对,早晚水平大凡盖它只能对键值对进展较)。

key_compare     key_comp() const;
value_compare   value_comp() const;

她返回一个comparison object,可以分别对键、值进行较。

lower_bound、upper_bound

立马半单函数比较生硬难掌握,这里领出来证实一下。

lower_bound返回传入键的下界,包括该键(如果在的话):
C++ 2

upper_bound返回传入键的上界,不包括该键(如果有的话):
C++ 3

区区单函数这样设计的语句:

  1. 流传同一个键,能是地将一个range分成上下两片。
  2. 据此迭代器表示的range,开始跟最终分别以闭区间与始发区间表示,这片单函数的归到得十分直观的代表range。

出奇函数

以映射容器的特殊性,map和multimap具有任何容器所未曾底片段突出函数:

  • find
  • count:坐map是单映射,所以它的回来到仅或是1或0
  • equal_range:返回给定键的素范围,以map是单映射,返回的范围吗空或含一个元素
    返回值为迭代器pair,分别相当于调用lower_bound和upper_bound的结果。

multimap

multimap为一对多照,即一个C++Key可能映射到差不多个价。

因凡一样针对性多映射的干,该库没有供诸如map::operator
[]、map::at那样的要素存取函数,
而是想给用户因让lower_bound、upper_bound这些函数。

语义完整的函数

再者,因为许一个键有对许多独价值,某些函数也取得了她确实的意思:

  • count(不止是回去回0、1)
  • equal_range(不止是回到空范围或者带有一个素的范围)

语义有异的函数

  • find(如果发多单价,回来任意一个