std::
multimap
类模板 <map>
template < class Key, // multimap::key_type
class T, // multimap::multimapped_type
class Compare = less<Key>, // multimap::key_compare
class Alloc = allocator<pair<const Key,T> > // multimap::allocator_type
> class multimap; |
多重映射
multimap是一种关联容器,它存储由键值和映射值按特定顺序组合而成的元素,其中多个元素可以具有相同的键。
在multimap中,键值通常用于对元素进行排序和惟一标识,而映射的值存储与此键相关的内容。
key和映射值的类型可能不同,并在成员类型
value_type中组合在一起,
value_type是一种组合这两种类型的
pair类型:
typedef pair<const Key, T> value_type; |
在内部,multimap中的元素总是按照其键进行排序,并遵循由内部比较对象(Compare类型)指示的特定严格弱排序标准。
multimap容器通过键访问单个元素通常比
unordered_multimap容器慢,但它们允许基于它们的顺序对子集进行直接迭代。
multimap通常被实现为二叉搜索树.
☲ 容器特性
-
关联
-
关联容器中的元素是通过它们的键引用的,而不是通过它们在容器中的绝对位置引用的。
-
有序
-
容器中的元素始终遵循严格的顺序。所有插入的元素都按此顺序给定一个位置。
-
映射
-
每个元素将一个键与一个映射值相关联:键意味着标识其主要内容是映射值的元素.
-
键唯一
-
容器中的多个元素可以具有相同的键.
-
分配器
-
容器使用allocator对象动态地处理其存储需求。
☲ 模板参数
-
Key
-
键的类型。映射中的每个元素都是由其键值标识的。
成员类型multimap::key_type的别名.
-
T
-
映射值的类型。multimap中的每个元素都存储一些数据作为其映射值。
成员类型multimap::multimapped_type的别名.
-
Compare
-
接受两个元素键作为参数并返回bool值的二元谓词。
表达式comp(a,b),其中comp是这种类型的对象,a和b是键值,
如果在函数定义的严格弱排序中a被认为在b之前,则返回true。
映射对象使用这个表达式来确定元素在容器中遵循的顺序,
以及两个元素键是否相等(通过条件自动地比较它们:如果!comp(a,b) && !comp(b,a),它们是相等的)。
这可以是一个函数指针或一个函数对象(参见构造函数的例子)。
默认为less<T>,它返回的结果与小于操作符(a<b)相同。
成员类型multimap::key_compare 的别名.
-
Alloc
-
用于定义存储分配模型的allocator对象的类型。 默认情况下,
使用allocator类模板,它定义了最简单的内存分配模型,并且与值无关。
别名为成员类型 multimap::allocator_type.
☉ 成员类型
-
C++98:
-
成员类型 |
定义 |
注释 |
key_type |
起始模板参数(Key) |
|
mapped_type |
第二个模板参数(T) |
|
value_type |
pair<const key_type,mapped_type> |
|
key_compare |
第三个模板参数(Compare) |
默认为: less<key_type> |
value_compare |
嵌套函数类比较元素 |
参见 value_comp |
allocator_type |
第四个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
allocator_type::reference& |
默认分配器:
value_type& |
const_reference |
allocator_type::const_reference |
默认分配器:
const value_type& |
pointer |
allocator_type::pointer |
默认分配器:value_type* |
const_pointer |
allocator_type::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的双向迭代器 |
转换为const_iterator |
const_iterator |
指向const value_type的双向迭代器 |
|
reverse_iterator |
reverse_iterator<iterator> |
|
const_reverse_iterator |
reverse_iterator<const_iterator> |
|
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
-
C++11:
-
成员类型 |
定义 |
注释 |
key_type |
起始模板参数(Key) |
|
mapped_type |
第二个模板参数(T) |
|
value_type |
pair<const key_type,mapped_type> |
|
key_compare |
第三个模板参数(Compare) |
默认为: less<key_type> |
value_compare |
嵌套函数类比较元素 |
参见 value_comp |
allocator_type |
第三个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
value_type& |
|
const_reference |
const value_type& |
|
pointer |
allocator_traits<allocator_type>::pointer |
默认分配器:value_type* |
const_pointer |
allocator_traits<allocator_type>::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的双向迭代器 |
转换为const_iterator |
const_iterator |
指向const value_type的双向迭代器 |
|
reverse_iterator |
reverse_iterator<iterator> |
|
const_reverse_iterator |
reverse_iterator<const_iterator> |
|
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
☞ 成员函数
迭代器:
begin |
返回一个指向multimap开头的迭代器 (公众成员函数) |
end |
返回一个指向multimap末尾元素的下一个元素的迭代器 (公众成员函数) |
rbegin |
返回指向multimap最后一个元素的反向迭代器 (公众成员函数) |
rend |
返回指向multimap开始元素之前的理论元素的反向迭代器(公众成员函数) |
cbegin |
返回一个指向multimap开头的常量迭代器 (公众成员函数) |
cend |
返回一个指向multimap末尾元素的下一个元素的常量迭代器 (公众成员函数) |
crbegin |
返回指向multimap最后一个元素的常量反向随机迭代器(公众成员函数) |
crend |
返回指向multimap开始元素前一个元素的常量反向随机迭代器 (公众成员函数) |
容量:
修改器:
查看:
操作:
分配器: