map

         Map是一系列有一个键值(key)和映射值(value)组合的存储元素关联容器。

        在一个map中,key值是唯一的确定一个元素,而映射值(value)是这个key相关的值的某个排序。键的类型和值的类型是不同的,例如,map的一个典型的实例----电话簿索引是以姓名作为key,以电话号码作为value的。

        本质上,map中的元素是从低到高的键值排序伴随着一个设置在构造函数中严格的弱排序的标准。

        作为关联容器,他们特别设计了通过键值快速访问(不像通过相关联或者相对位置快速访问的顺序容器)。

         因此,下面是map作为关联容器的几个主要特征:

  • 唯一的键值:在map容器中,每个键值都是唯一的。
  • 每一个元素都是有键和值组成。元素值即为其键的简单的关联容器,需要看一下set关联容器。
  • 元素始终保持着严格的弱排序。

        map中的键唯致使此关联容器可以直接执行访问操作(operator[]),此访问操作允许访问值。

        在c++标准模板库的说明文档中,map容器有四个模板参数:

template<class Key, class T., class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > > class map;

         参数解析:

  • Key:键值的类型,map容器的每一个元素都是唯一的有键值确定。
  • T:映射值的类型,map中的每一个元素都是用于存储某些数据作为其映射值。
  • Compare:比较类:一个带有两个键类型的参数和返回一个布尔值(bool)。表达式comp(a, b),comp是比较类的对象,a和b是键值,如果a在b之前(类似a<b),返回true;也可以是执行函数操作的类或者一个指向函数的指针。它默认为less<Key>,其中less<Key>和a<b返回的值类似。map对象用这个表达式决定元素在容器中的位置。所有在map容器着哦功能的元素都始终遵守这个规则。
  • Allocator:用于定义存储分配模型的分配器对象类型,默认的情况下,使用allocator类模板,这个类模板是最简单的内存分配模型并且是值独立的。

         这个容器类支持双向迭代。

         迭代器访问map容器元素的key和value。为此,类定义了value_type类型,此类型是一个第一个值为对应的常key类型(模板参数Key)和第二个值对应的value(模板参数为T)的pair类:

          typedef pair<const Key, T> value_type;

         map容器的迭代器指向value_type类型的元素,因此,对于一次迭代调用,可以指向map元素,此元素的key和value都可以分别访问到:         

map<Key, T>::iterator it;
(*it).first;           //键值
(*it).second;     //映射值
(*it)                    //元素值(pair<const Key,T>类型)
         当然,任何其他的直接访问操作,例如->或者[]可以使用,例如:

it->first;
it->second;

成员函数


迭代器:

容器(Capacity:

元素访问:

修改容器操作:

观察者(Observers:

操作:

分配器:

成员类型

of template <class Key, class T, class Compare=less<Key>, class Allocator=allocator<pair <const Key, T> > > class map;
member typedefinition
key_typeKey
mapped_typeT
value_typepair<const Key,T>
key_compareCompare
value_compareNested class to compare elements (see member function value_comp)
allocator_typeAllocator
referenceAllocator::reference
const_referenceAllocator::const_reference
iteratorBidirectional iterator
const_iteratorConstant bidirectional iterator
size_typeUnsigned integral type (usually same as size_t)
difference_typeSigned integral type (usually same as ptrdiff_t)
pointerAllocator::pointer
const_pointerAllocator::const_pointer
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐