map用来存储由关键字和它们的值构成的一些有序项的集合。
关键字必须是唯一的,但多个关键字可能映射到一些相同的值。这样,值可不比唯一。map中的关键字保持逻辑上的有序状态。
map支持begin、end、size、和empty,但其基础迭代器是一个关键字-值对。换句话说,对于iteratoritr,*itr为pair<KeyType,ValueType>类型。map还支持insert、find和erase。对于insert,我们必须提供一个pair<KeyType,ValueType>对象。虽然find只要求一个关键字,但是它返回的iterator却引用一个pair。只使用这些操作常常是不划算的,因为语法代价可能会很高昂。
所幸的是,map有一个重要的附加操作,这个操作会带来简单的语法。对map来说,其数组索引运算符重载如下:
ValueType & operator[] (const KeyType & key);
operator[ ] 语义如下。如果在map中出现key,那么对应值得引用就被返回。如果在map中key不出现,那么它就和一个默认值一起被插入到map中,然后返回所插入的默认值的引用。这个默认值通过应用零参数构造函数获得,对于一些基本类型它的值为零。语法不允许访问函数版本的operator[ ],因此operator[ ]不能用在常量的map上。例如,如果一个map通过常量引用传递,那么在例程内部operator[ ]是不可用的。