map 类

用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对。 键的值是唯一的,用于自动排序数据。

可以直接更改映射中的元素值。 键值是常量,不能更改。 必须先删除与旧元素关联的键值,才能为新元素插入新键值。

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

参数

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

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

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

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

备注

标准模板库 (STL) 映射类是:

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

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

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

  • 唯一,因为它的每个元素必须具有唯一键。

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

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

映射类提供的迭代器是双向迭代器,但类成员函数 insertmap 具有将较弱输入迭代器作为模板参数的版本,较弱输入迭代器的功能要求少于双向迭代器类保证的功能要求。 不同的迭代器概念通过它们的功能优化相关联。 每个迭代器概念有它自己的一套要求,使用这些概念的算法必须受这些要求的限制。 输入迭代器可取消引用以引用某个对象,并可递增到序列中的下一迭代器。

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

建议你在应用程序满足将值与键关联的条件时,选择映射作为关联容器。 此类结构的模型是关键字排序列表,这些关键字只出现一次,并具有提供定义的关联字符串值。 如果关键字有多个正确定义,则此关键字不唯一,应选择多重映射作为容器。 如果仅存储关键字列表,则应使用集作为适当容器。 如果允许关键字多次出现,则多重集合为适当容器。

映射通过调用存储的 key_compare 类型的函数对象,对它控制的元素进行排序。 此存储的对象是比较函数,可通过调用 key_comp 方法访问。 通常,将比较任意两个给当元素,以确定其中一个是否小于另一个或两者是否等效。 比较所有元素后,将创建非等效元素的排序序列。

备注

比较函数是一个二元谓词,在标准数学的意义上引发严格弱排序。二元谓词 f(x,y) 是包含两个参数对象(x 和 y)以及一个返回值(true 或 false)的函数对象。如果二元谓词具有自反性、反对称性和传递性且等效可传递,对集进行的排序将为严格弱排序,其中两个对象 x 和 y 定义为在 f(x,y)和 f(y,x) 均为 false 时等效。如果键之间的更强相等条件取代了等效性,则排序将为总排序(即所有元素彼此排序),并且匹配的键将难以彼此辨别。

成员

构造函数

map

构造特定大小的列表、包含具有特定值的元素的列表、包含特定 allocator 的列表或作为其他某个映射的副本的列表。

Typedef

allocator_type

映射对象的 allocator 类的 typedef。

const_iterator

可读取映射中 const 元素的双向迭代器的 typedef。

const_pointer

指向映射中的 const 元素的指针的 typedef。

const_reference

对存储在映射中的 const 元素的引用(用于读取和执行 const 操作)的 typedef。

const_reverse_iterator

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

difference_type

映射中迭代器指向的元素间范围内元素数量的有符号整数 typedef。

iterator

可读取或修改映射中任何元素的双向迭代器的 typedef。

key_compare

可比较两个排序键以确定映射中两个元素的相对顺序的函数对象的 typedef。

key_type

存储在映射内每个元素中的排序键的 typedef。

mapped_type

存储在映射内每个元素中的数据的 typedef。

pointer

指向映射中的 const 元素的指针的 typedef。

reference

对映射中存储的元素的引用的 typedef。

reverse_iterator

可读取或修改反向映射中的元素的双向迭代器的 typedef。

size_type

映射中元素数量的无符号整数 typedef。

value_type

作为元素存储在映射中的对象类型的 typedef。

成员函数

at

查找具有指定键值的元素。

begin

返回一个迭代器,此迭代器指向映射中的第一个元素。

cbegin

返回一个常量迭代器,此迭代器指向映射中的第一个元素。

cend

返回一个超过末尾常量迭代器。

clear

清除映射的所有元素。

count

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

crbegin

返回一个常量迭代器,此迭代器指向反向映射中的第一个元素。

crend

返回一个常量迭代器,此迭代器指向反向映射中最后一个元素之后的位置。

emplace

将就地构造的元素插入到映射。

emplace_hint

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

empty

如果映射为空,则返回 true。

end

返回超过末尾迭代器。

equal_range

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

erase

从指定位置移除映射中的元素或元素范围。

find

返回一个迭代器,此迭代器指向映射中其键与指定键相等的元素的位置。

get_allocator

返回用于构造映射的 allocator 对象的副本。

insert

将元素或元素范围插入到映射中的指定位置。

key_comp

返回用于对映射中的键进行排序的比较对象副本。

lower_bound

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

max_size

返回映射的最大长度。

rbegin

返回一个迭代器,此迭代器指向反向映射中的第一个元素。

rend

返回一个迭代器,此迭代器指向反向映射中最后一个元素之后的位置。

size

返回映射中的元素数量。

swap

交换两个映射的元素。

upper_bound

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

value_comp

检索用于对映射中的元素值进行排序的比较对象副本。

运算符

operator[]

将元素插入到具有指定键值的映射。

operator=

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

要求

标头:<map>

命名空间: std

请参见

参考

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

标准模板库

概念

容器

其他资源

map 成员