菱纱梦

导航

C++学习笔记 <map>

C++中关联数组是一种内部类型,也被称为映射(map)

一个map就是一个(关键吗,值)的对偶序列,他提供基于关键码的快速提取操作

map的关键吗具有唯一性

map提供双向迭代器

map的关键吗要提供一个小于操作,保持自己元素的有序性,  迭代通过map时,是按顺序的

一个map就是一个pair<const Key,mapped_type>的一个序列,mapped_type表示映射值的类型

 

pair本身是一个标准库类,默认情况下,pair将被用其元素类型的默认值进行初始化。如果一个类型没有默认构造函数,要将他作为pair的元素时,就必须显示提供创建pair的参数

 

下标:

map的特征操作就是采用下表运算符提供的关联查找。

将关键吗作为下标执行查找,并返回对应的值,如果不存在该关键码,就将一个具有该关键码和mapped_type类型默认值的pair插入到map。

不能对const map做下标查找     只有mapped_type有默认值时才能进行下标查找

 

映射操作:

iterator  find(key);  //找关键码为key的元素,如果不存在返回m.end()

count(key);   //找关键吗为key的元素个数

lower_bound(key);  //找第一个关键码为key的元素

upper_bound(key);  //找第一个关键码大于key的元素

equal_range(key);  //返回一个pair(iterator,iterator)

 

表操作:

将一个值放入关联容器的最方便方式就是使用下标操作直接赋值

m["a"]=12;

也可以通过insert()直接插入项目,或者通过erase()删除其中的项目

pair<iterator,bool> insert(const value_type& val);  //插入(关键码,值)对

iterator insert(iterator pos,const value_type& val);   //pos只是个提示

template <class In> void insert(In first,In last);  //从序列中插入

void erase(iterator pos);   //删除被指元素

size_type erase(const key_type& k);   //删除关键码为k的元素

void erase (iteraror first,iterator last);   //删除一个区间

void clear();     //删除所有元素

 

m.insert(value_type& pair);   //返回一个pair(iterator,bool),iteartor是pair插入后(或已存在)的迭代器

 

*  []不只是insert()的一种方便表述形式。 m[k]的结果等价于 (*(m.insert(makepair(k,V())).first)).second  ,V()是映射类型的默认值。

 首先创建一个pair(k,V())    然后调用insert(pair)   得到insert()返回的迭代器,找到该迭代器所指向元素的值

 

当erase()的参数是关键字时返回的是删除元素的个数

如:int count = m.erase("Ratbert");

 

其他函数:

size_type  size() const;

size_type max_size() const;  //map最大可能规模

bool empty() const{return size()==0 ;}

void swap(map&);

map 还提供了 ==、!=、<、>、<=、>=、 swap()    都是非成员函数

 

posted on 2014-09-14 14:36  菱纱梦  阅读(245)  评论(0编辑  收藏  举报