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并非常量。
| Operation | Effect | 效果 |
| map c | Default 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 = c2 | Copy 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 = 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(beg,end) | Creates a map/multimap initialized by the elements of the range [beg,end) | 以区间[beg,end)内的元素为初值,建立一个map/multimap |
| map 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/multimap |
| map c(initlist) | Creates a map/multimap initialized with the elements of initializer list initlist (since C++11) | 建立一个map/multimap,以初值列initlist的元素为初值(始自C++11) |
| map c = initlist | Creates 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 | 销毁所有元素,释放内存 |



