欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

STL容器-Map与Multimap-导读-能力-操作函数

时间:2023-05-17
0.导读

Map和 multimap将key/value pair当作元素进行管理。它们可根据key的排序准则自动为元素排序。Multimap允许重复元素,map 不允许。

使用map和 multimap之前,你必须先包含头文件 :

#include
There, the types are defined as class templates inside namespace std:
namespace std {
template typename Compare = less,
typename Allocator = allocator > >
class map;
template typename Compare = less,
typename Allocator = allocator > >
class multimap;
}

第一个template实参将成为元素的key类型,第二个template实参将成为元素的value类型。Map和 multimap的元素类型Key和T必须满足以下两个条件:

1、Key和 value都必须是copyable (可复制的)或movable(可搬移的)。

2、对指定的排序准则而言,key必须是comparable(可比较的)。


注意,元素类型(value_type)是个pair 。第三个template实参可有可无,用来定义排序准则。和set一样,这个排序准则必须定义为strict weak ordering(见7.7节第314页)。元素的次序由它们的key 决定,和value无关。排序准则也可以用来检查相等性:如果两个元素的key彼此都不小于对方,两个元素被视为相等。

1.Map和Multimap的能力

和其他所有关联式容器一样, map/multimap通常以平衡二叉树完成,如图7.15所示。C++standard并未明定这一点,但是从map和multimap各项操作的复杂度自然可以得出这一结论。通常set、multiset、 map和multimap使用相同的内部结构,因此,你可以把set和multiset视为特殊的 map和 multimap,只不过set元素的 value和 key是同一对象。因此,map和multimap拥有set和 multiset 的所有能力和所有操作。当然,某些细微差异还是有的: 首先,它们的元素是key/value pair,其次, map可作为关联式数组(associative array)来运用。

Map和multimap 会根据元素的key自动对元素排序。这么一来,根据已知的key查找某个元素时就能够有很好的效率,而根据已知value查找元素时,效率就很糟糕。“自动排序”这一性质使得 map和 multimap身上有了一条重要限制: 你不可以直接改变元素的key,因为这会破坏正确次序。要修改元素的key,必须先移除拥有该key的元素,然后插入拥有新key/value的元素(详见7.8.2节)。从迭代器的观点看元素的key是常量。至于元素的value倒是可以直接修改,当然前提是value并非常量。
 

2.Map和Multimap的操作函数 2.1 创建,赋值,销毁 OperationEffect效果map cDefault constructor; creates an empty map/multimap
without any elements默认构造函数,建立一个空map/multimap,不含任何元素
 map c(op)Creates an empty map/multimap that uses op as the
sorting criterion建立一个空map/multimap,以op为排序准则map c(c2)Copy constructor; creates a copy of another
map/multimap of the same type (all elements are copied)拷贝构造函数,为相同类型的另一个map/multimap建立一份拷贝,所有元素均被复制map c = c2Copy constructor; creates a copy of another
map/multimap of the same type (all elements are copied)拷贝构造函数,为相同类型的另一个map/multimap建立一份拷贝,所有元素均被复制map c(rv)Move constructor; creates a new map/multimap of the
same type, taking the contents of the rvalue rv (since
C++11)移动构造函数,建立一个新的map/multimap,有相同类型,取rvalue rv的内容(始自C++11)
 map c = rvMove constructor; creates a new map/multimap of the
same type, taking the contents of the rvalue rv (since
C++11)移动构造函数,建立一个新的map/multimap,有相同类型,取rvalue rv的内容(始自C++11)map c(beg,end)Creates a map/multimap initialized by the elements of the
range [beg,end)以区间[beg,end)内的元素为初值,建立一个map/multimapmap c(beg,end,op)Creates a map/multimap with the sorting criterion op
initialized by the elements of the range [beg,end)以区间[beg,end)内的元素为初值,并以op为排序准则,建立一个map/multimapmap c(initlist)Creates a map/multimap initialized with the elements of
initializer list initlist (since C++11)建立一个map/multimap,以初值列initlist的元素为初值(始自C++11)
 map c = initlistCreates a map/multimap initialized with the elements of
initializer list initlist (since C++11)建立一个map/multimap,以初值列initlist的元素为初值(始自C++11)
 c.~map()Destroys all elements and frees the memory销毁所有元素,释放内存

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。