multimap 类

标准模板库多重映射类用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对。 键值不需要唯一,用于自动排序数据。 可以直接更改多重映射中的元素值,但不能直接更改其关联键值。 必须先删除与旧元素关联的键值,才能插入与新元素关联的新键值。

template <
   class Key, 
   class Type, 
   class Traits=less<Key>, 
   class Allocator=allocator<pair <const Key, Type> > 
> class multimap;

参数

  • Key
    要存储在多重映射中的键数据类型。

  • Type
    要存储在多重映射中的元素数据类型。

  • Traits
    一种提供函数对象的类型,该函数对象可将两个元素值作为排序键进行比较,以确定其在多重映射中的相对顺序。 默认值是二元谓词 less<Key>。

  • Allocator
    一种表示存储的分配器对象的类型,该分配器对象封装有关映射的内存分配和解除分配的详细信息。 此参数为可选参数,默认值为 allocator<pair <const Key, Type> >

备注

STL 多重映射类是:

  • 大小可变的关联容器,支持基于关联键值高效检索元素值。

  • 可逆,因为它提供双向迭代器来访问其元素。

  • 有序,因为它的元素在容器中根据指定的比较函数按键值排序。

  • 多个,它的元素不需要具有唯一键,因此一个键值可具有多个相关联的元素数据值。

  • 关联容器对,因为它的元素数据值与其键值不同。

  • 模板类,因为它提供的功能是一般性的功能,因此与作为元素或键包含的特定数据类型无关。 用于元素和键的数据类型作为类模板以及比较函数和分配器中的参数指定。

映射类提供的迭代器是双向迭代器,但类成员函数 insertmultimap 具有将较弱输入迭代器作为模板参数的版本,较弱输入迭代器的功能要求比双向迭代器类保证的功能要求更少。 不同的迭代器概念形成一个系列,通过它们的功能优化相关联。 每个迭代器概念有它自己的一套要求,使用这些概念的算法必须根据迭代器类型提供的要求限制它们的假设。 可以假定输入迭代器可取消引用以引用某个对象,并可递增到序列中的下一迭代器。 这是最小的功能集,但足以按有意义的方式提供类成员函数的上下文中的迭代器范围 [First, Last)

容器类型选择通常应根据应用程序所需的搜索和插入的类型。 关联容器针对查找、插入和移除操作进行了优化。 显式支持这些操作的成员函数较为高效,执行这些操作的时间与容器中元素数量的对数平均成比例。 插入元素不会使迭代器失效,移除元素仅会使专门指向已移除元素的迭代器失效。

当应用程序满足将值与其键关联的条件时,应选择多重映射作为关联容器。 此类结构的模型是关键字排序列表,这些关键字具有提供定义等的关联字符串值,并且并非始终唯一定义。 如果关键字经过唯一定义以使键唯一,则应选择映射作为容器。 另一方面,如果仅存储关键字列表,则应使用集作为正确容器。 如果允许关键字多次出现,则应使用多重集合作为适当的容器结构。

多重映射通过调用存储的 key_compare 类型的函数对象,对它控制的序列进行排序。 此存储的对象是比较函数,可通过调用成员函数 key_comp 访问。 通常,元素仅需小于比较元素即可建立此顺序;因此,给定任意两个元素,可以确定这两个元素等效(即两者均不小于对方)或其中一个小于另一个。 这将导致在非等效元素之间进行排序。 在技术性更强的说明中,比较函数是一个二元谓词,在标准数学的意义上引发严格弱排序。 二元谓词 f(x,y) 是包含两个参数对象(x 和 y)以及一个返回值(true 或 false)的函数对象。 如果二元谓词具有自反性、反对称性和传递性且等效可传递,对集进行的排序将为严格弱排序,其中两个对象 x 和 y 定义为在 f(x,y)f(y,x) 均为 false 时等效。 如果键之间的更强相等条件取代了等效性,则排序将为总排序(即所有元素彼此排序),并且匹配的键将难以彼此辨别。

成员

构造函数

multimap

构造一个空的或者是其他某个 multimap 的全部或部分副本的 multimap

Typedef

allocator_type

一种类型,此类型表示 multimap 对象的 allocator 类。

const_iterator

一种类型,此类型提供可读取 multimap 中的 const 元素的双向迭代器。

const_pointer

一种类型,此类型提供指向 multimap 中的 const 元素的指针。

const_reference

一种类型,此类型提供对存储在 multimap 中的 const 元素的引用(用于读取和执行 const 操作)。

const_reverse_iterator

一种类型,此类型提供可读取 multimap 中的任何 const 元素的双向迭代器。

difference_type

一种有符号整数类型,此类型可用于表示 multimap 中迭代器指向的元素间范围内的元素数量。

iterator

一种类型,此类型提供引用同一 multimap 中的元素的两个迭代器之间的差异。

key_compare

一种提供函数对象的类型,该函数对象可比较两个排序键以确定 multimap 中两个元素的相对顺序。

key_type

一种类型,此类型描述组成 multimap 中每个元素的排序键对象。

mapped_type

一种类型,此类型表示存储在 multimap 中的数据类型。

pointer

一种类型,此类型提供指向 multimap 中的 const 元素的指针。

reference

一种类型,此类型提供对存储在 multimap 中的元素的引用。

reverse_iterator

一种类型,此类型提供可读取或修改反向 multimap 中的元素的双向迭代器。

size_type

一种无符号整数类型,此类型提供指向 multimap 中const 元素的指针。

value_type

一种提供函数对象的类型,该函数对象可将两个元素作为排序键比较以确定它们在 multimap 中的相对顺序。

成员函数

begin

返回一个迭代器,此迭代器用于发现 multimap 中的第一个元素。

cbegin

返回一个常量迭代器,此迭代器用于发现 multimap 中的第一个元素。

cend

返回一个常量迭代器,此迭代器用于发现 multimap 中最后一个元素之后的位置。

clear

清除 multimap 的所有元素。

count

返回 multimap 中其键与指定为参数的键匹配的元素数量。

crbegin

返回一个常量迭代器,此迭代器用于发现反向 multimap 中的第一个元素。

crend

返回一个常量迭代器,此迭代器用于发现反向 multimap 中最后一个元素之后的位置。

emplace

将就地构造的元素插入到 multimap

emplace_hint

将就地构造的元素插入到 multimap,附带位置提示

empty

测试 multimap 是否为空。

end

返回一个迭代器,此迭代器用于发现 multimap 中最后一个元素之后的位置。

equal_range

查找其中元素的键与指定值匹配的元素范围。

erase

multimap 中的指定位置移除一个元素或元素范围,或者移除与指定键匹配的元素。

find

返回一个迭代器,此迭代器用于发现 multimap 中其键与指定键等效的元素的第一个位置。

get_allocator

返回用于构造 multimapallocator 对象的副本。

insert

将一个元素或元素范围插入到 multimap

key_comp

检索用于对 multimap 中的键进行排序的比较对象副本。

lower_bound

返回一个迭代器,此迭代器指向 multimap 中其键等于或大于指定键的第一个元素。

max_size

返回 multimap 的最大长度。

rbegin

返回一个迭代器,此迭代器用于发现反向 multimap 中的第一个元素。

rend

返回一个迭代器,此迭代器用于发现反向 multimap 中最后一个元素之后的位置。

size

返回 multimap 中的元素数量。

swap

交换两个 multimap 的元素。

upper_bound

返回一个迭代器,此迭代器指向 multimap 中其键大于指定键的第一个元素。

value_comp

此成员函数返回一个函数对象,该函数对象可通过比较 multimap 中元素的键值来确定元素顺序。

运算符

operator=

将一个 multimap 中的元素替换为另一 multimap 副本。

要求

标头:<map>

命名空间: std

(key, value) 对作为 pair 类型的对象存储在多重映射中。 此对类需要标头 <utility>,<map> 自动包括此标头。

请参见

参考

C++ 标准库中的线程安全

标准模板库

概念

容器

其他资源

map 成员