Map和 multimap将key/value pair当作元素进行管理。它们可根据key的排序准则自动为元素排序。Multimap允许重复元素,map 不允许。
使用map和 multimap之前,你必须先包含头文件
#include
第一个template实参将成为元素的key类型,第二个template实参将成为元素的value类型。Map和 multimap的元素类型Key和T必须满足以下两个条件:
1、Key和 value都必须是copyable (可复制的)或movable(可搬移的)。
2、对指定的排序准则而言,key必须是comparable(可比较的)。
注意,元素类型(value_type)是个pair
和其他所有关联式容器一样, 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并非常量。
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销毁所有元素,释放内存