Cpp Standard Library 简明教程
C++ Library - <map>
Introduction to map
Map 就像词典中的数据结构。它是(键值)对的序列,其中每个唯一键只关联单个值。它通常被称为关联数组。
在 map 中,键值通常用于对元素进行排序。对于 map 数据类型,键和值可以不同,表示为
typedef pair<const Key, T> value_type;
Map 通常实现为二叉搜索树。
零大小的地图也是合法的。在这种情况下,map.begin() 和 map.end() 指向同一个位置。
Definition
以下是 <map> 头文件中的 std::map 定义
template < class Key,
class T,
class Compare = less<Key>,
class Alloc = allocator<pair<const Key,T> >
> class map;
Parameters
-
Key − 键的类型。
-
T − 映射值类型。
-
Compare − 一个二进制谓词,它将两个元素键作为参数,并返回一个 bool 值。
-
Alloc − 分配器对象类型。
T 可以替换为任何其他数据类型,包括用户自定义类型。
Member types
以下成员类型可作为参数或返回类型,由成员函数使用。
Sr.No. |
Member types |
Definition |
1 |
key_type |
Key (模板的第一个参数) |
2 |
mapped_type |
T (模板的第二个参数) |
3 |
key_compare |
比较(模板的第三个参数) |
4 |
allocator_type |
分配(模板的第四个参数) |
5 |
value_type |
pair<const key_type,mapped_type> |
6 |
value_compare |
嵌套函数类用于比较元素 |
7 |
reference |
allocator_type::reference |
8 |
const_reference |
allocator_type::const_reference |
9 |
pointer |
allocator_type::pointer |
10 |
const_pointer |
allocator_type::const_pointer |
11 |
iterator |
bi-directional iterator to value_type |
12 |
const_iterator |
用于比较元素的双向迭代器 |
13 |
reverse_iterator |
reverse iterator |
14 |
const_reverse_iterator |
constant reverse iterator |
15 |
difference_type |
ptrdiff_t |
16 |
size_type |
size_t |
Functions from <map>
以下是 <map> header 中所有方法的列表。
Constructors
Sr.No. |
Method & Description |
1 |
map::map 默认构造函数构造一个空映射,其中不包含任何元素。 |
2 |
map::map 范围构造函数构造一个映射,其中包含从第一个到最后一个的范围内的元素。 |
3 |
map::map 复制构造函数构造一个映射,其中包含现有映射中每个元素的副本。 |
4 |
map::map 移动构造函数使用移动语义构造一个包含其他内容的映射。 |
5 |
map::map 初始化列表构造函数构造一个映射,其中包含初始化列表。 |
Destructor
Sr.No. |
Method & Description |
1 |
map::~map 通过释放内存销毁映射对象。 |
Member functions
Sr.No. |
Method & Description |
1 |
map::at 返回与键 k 关联的映射值的引用。 |
2 |
map::begin 返回一个迭代器,该迭代器指向映射的第一个元素。 |
3 |
map::cbegin 返回一个常量迭代器,该迭代器指向映射的第一个元素。 |
4 |
map::cend 返回一个常量迭代器,该迭代器指向过去映射结束元素的位置。 |
5 |
map::clear 通过删除所有元素并设置映射大小为零来销毁映射。 |
6 |
map::count 返回与键 k 相关联的已映射值的数目。 |
7 |
map::crbegin 返回一个常量逆向迭代器,它指向容器 i 的最后一个元素。 |
8 |
map::crend 返回一个常量逆向迭代器,它指向容器 i 中理论上在第一个元素之前的元素。 |
9 |
map::emplace 通过插入新元素来扩展容器。 |
10 |
map::emplace_hint hint 版本使用 hint 作为元素的位置在映射中插入一个新元素。 |
11 |
map::empty 测试映射是否为空。 |
12 |
map::end 返回一个指向映射中超出范围元素的迭代器。 |
13 |
map::equal_range 返回与特定键匹配的元素范围。 |
14 |
map::erase 位置版本从位置中移除映射的单个元素。 |
15 |
map::erase 位置版本从位置中移除映射的单个元素。 |
16 |
map::erase key移除与键 k 相关联的已映射值。 |
17 |
map::erase 范围版本从映射中移除元素范围。 |
18 |
map::erase 范围版本从映射中移除元素范围。 |
19 |
map::find 查找与键 k 相关联的元素。 |
20 |
map::get_allocator 返回与映射相关联的分配器。 |
21 |
map::insert 单个元素通过在映射中插入新元素来扩展容器。 |
22 |
map::insert hint 版本通过在映射中插入新元素来扩展容器。 |
23 |
map::insert 范围版本通过在映射中插入新元素来扩展容器。 |
24 |
map::insert 移动 提示版本通过插入新元素来扩展映射。 |
25 |
map::insert 初始化器列表版本通过从初始化列表中插入新元素来拓展映射。 |
26 |
map::key_comp 返回一个函数对象用于比较键,该函数对象是此容器构造函数参数 comp 的副本。 |
27 |
map::lower_bound 返回一个迭代器,它指向不小于键 k 的第一个元素。 |
28 |
map::max_size 返回映射可以容纳的最大数量的元素。 |
29 |
map::operator= 复制版本给映射分配新内容,如果必要则替换旧内容并修改大小。 |
30 |
map::operator= 移动版本将一个映射的内容移动到另一个映射中,如果必要则修改大小。 |
31 |
map::operator= 初始化器列表版本从初始化列表中复制元素到映射。 |
32 |
map::operator[] 复制版本如果键 k 与容器中的一个元素匹配,接着此方法返回对元素的引用。 |
33 |
map::operator[] 移动版本如果键 k 与容器中的一个元素匹配,接着此方法返回对元素的引用。 |
34 |
map::rbegin 返回一个反向迭代器,指向映射的最后一个元素。 |
35 |
map::rend 返回一个反向迭代器,指向映射的相反一端 i。 |
36 |
map::size 返回存在于映射中的元素数量。 |
37 |
map::swap 用映射 x 的内容互换映射的内容。 |
38 |
map::upper_bound 返回一个迭代器,它指向大于键 k 的第一个元素。 |
39 |
map::value_comp 返回一个函数对象用于比较 std::map::value_type 类型的对象。 |
Non-member overloaded functions
Sr.No. |
Method & Description |
1 |
[role="bare"]../cpp_standard_library/cpp_map_operator_equal_to.html 测试两个映射是否相等。 |
2 |
operator!= 测试两个映射是否相等。 |
3 |
operator< 测试第一个映射是否小于另一个映射。 |
4 |
map::operator⇐ 测试第一个映射是否小于或等于另一个映射。 |
5 |
operator> 测试第一个映射是否大于另一个映射。 |
6 |
operator>= 测试第一个映射是否大于或等于另一个映射。 |
7 |
swap() 使用映射 x 的内容交换映射的内容。 |
Introduction to multimap
多重映射是类似于字典的数据结构。它是 (键, 值) 对的序列,其中多个值可以与等效的键相关联。它通常被称为关联数组。
在多重映射中,键值通常用于对元素进行排序。对于多重映射,键和值的数据类型可以不同,表示如下:
typedef pair<const Key, T> value_type;
多重映射通常作为二叉查找树来实现。
零大小的多重映射也是有效的。在这种情况下,multimap.begin() 和 multimap.end() 指向同一位置。
Definition
以下是 <multimap> 头文件中的 std::multimap 的定义
template < class Key,
class T,
class Compare = less<Key>,
class Alloc = allocator<pair<const Key,T> >
> class multimap;
Member types
以下成员类型可作为参数或返回类型,由成员函数使用。
Sr.No. |
Member types |
Definition |
1 |
key_type |
Key (模板的第一个参数) |
2 |
mapped_type |
T (模板的第二个参数) |
3 |
key_compare |
比较(模板的第三个参数) |
4 |
allocator_type |
分配(模板的第四个参数) |
5 |
value_type |
pair<const key_type,mapped_type> |
6 |
value_compare |
嵌套函数类用于比较元素 |
7 |
reference |
allocator_type::reference |
8 |
const_reference |
allocator_type::const_reference |
9 |
pointer |
allocator_type::pointer |
10 |
const_pointer |
allocator_type::const_pointer |
11 |
iterator |
bi-directional iterator to value_type |
12 |
const_iterator |
用于比较元素的双向迭代器 |
13 |
reverse_iterator |
reverse iterator |
14 |
const_reverse_iterator |
constant reverse iterator |
15 |
difference_type |
ptrdiff_t |
16 |
size_type |
size_t |
Functions from <multimap>
以下是 <multimap> 头文件中的所有方法列表。
Constructors
Sr.No. |
Method & Description |
1 |
multimap::multimap 默认构造函数构造一个元素数为零的空的多重映射。 |
2 |
multimap::multimap 范围构造函数构造一个包含从第一个到最后一个范围内的元素内容的多重映射。 |
3 |
multimap::multimap 复制构造函数使用存在的多重映射中的各个元素的副本构造一个多重映射。 |
4 |
multimap::multimap 移动构造函数使用移动语义构造一个包含其他内容的多重映射。 |
5 |
multimap::multimap 初始值列表构造函数从初始值列表构造一个多重映射。 |
Destructor
Sr.No. |
Method & Description |
1 |
multimap::~multimap 通过释放内存销毁多重映射对象。 |
Member functions
Sr.No. |
Method & Description |
1 |
multimap::begin 返回一个指向多重映射第一个元素的迭代器。 |
2 |
multimap::cbegin 返回一个指向多重映射第一个元素的常量迭代器。 |
3 |
multimap::cend 返回一个指向多重映射末尾元素之后的常量迭代器。 |
4 |
multimap::clear 通过移除所有元素并设置多重映射的大小为零,销毁多重映射。 |
5 |
multimap::count 返回与键 k 关联的多重映射值的数目。 |
6 |
multimap::crbegin 返回一个指向容器最后一个元素的常量反向迭代器。 |
7 |
multimap::crend 返回一个指向容器中第一个元素之前理论元素的常量反向迭代器。 |
8 |
multimap::emplace 通过插入新元素扩展容器。 |
9 |
multimap::emplace_hint 提示版本使用提示作为元素位置,在多重映射中插入一个新元素。 |
10 |
multimap::empty 测试多重映射是否为空。 |
11 |
multimap::end 返回一个迭代器,指向多重映射中最后元素的后面。 |
12 |
multimap::equal_range 返回与特定键匹配的元素范围。 |
13 |
multimap::erase position version从该位置删除多重映射的单个元素。 |
14 |
multimap::erase position version从该位置删除多重映射的单个元素。 |
15 |
multimap::erase key删除与键 k 关联的映射值。 |
16 |
multimap::erase range version从多重映射中删除元素范围。 |
17 |
multimap::erase range version从多重映射中删除元素范围。 |
18 |
multimap::find 查找与键 k 关联的元素。 |
19 |
multimap::get_allocator 返回与多重映射关联的分配器。 |
20 |
multimap::insert 单个元素扩展容器在多映射中插入新元素。 |
21 |
multimap::insert 提示版本扩展容器在多映射中插入新元素。 |
22 |
multimap::insert 范围版本扩展容器在多映射中插入新元素。 |
23 |
multimap::insert 移动提示版本扩展多映射,插入新元素。 |
24 |
multimap::insert 初始值列表版本扩展多映射,从初始值列表中插入新元素。 |
25 |
multimap::key_comp 返回比较键的函数对象,它对此容器的构造参数 comp 的副本。 |
26 |
multimap::lower_bound 返回指向不小于键 k 的第一个元素的迭代器。 |
27 |
multimap::max_size 返回多映射可以容纳的最大元素数。 |
28 |
multimap::operator= 复制版本向多映射分配新内容,替换旧内容,并在必要时修改大小。 |
29 |
multimap::operator= 移动版本将一个多映射的内容移至另一个并根据需要修改大小。 |
30 |
multimap::operator= 初始化器列表版本将初始化器列表中的元素复制到多重映射中。 |
31 |
multimap::rbegin 返回一个反向迭代器,该迭代器指向多重映射的最后一个元素。 |
32 |
multimap::rend 返回一个反向迭代器,该迭代器指向多重映射的相反末尾。 |
33 |
multimap::size 返回多重映射中存在的元素数。 |
34 |
multimap::swap 使用多重映射 x 的内容交换多重映射的内容。 |
35 |
multimap::upper_bound 返回一个指向大于键 k 的第一个元素的迭代器。 |
36 |
multimap::value_comp 返回一个函数对象,该对象比较 std::multimap::value_type 类型的对象。 |
Non-member overloaded functions
Sr.No. |
Method & Description |
1 |
[role="bare"]../cpp_standard_library/cpp_multimap_operator_equal_to.html测试两个多重映射是否相等。 |
2 |
operator!= 测试两个多重映射是否相等。 |
3 |
operator< 测试第一个多重映射是否小于其他的多重映射。 |
4 |
multimap::operator⇐ 测试第一个多重映射是否小于或等于其他的多重映射。 |
5 |
operator> 测试第一个多重映射是否大于其他的多重映射。 |
6 |
operator>= 测试第一个多重映射是否大于或等于其他的多重映射。 |
7 |
swap() 使用多重映射 x 的内容交换多重映射的内容。 |