我为同学解难题⑬C++程序设计第6期:STL标准库之map容器

Posted 南理工乐学空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我为同学解难题⑬C++程序设计第6期:STL标准库之map容器相关的知识,希望对你有一定的参考价值。

上次在介绍vector容器时我们提到可以通过iterator迭代器来遍历vector元素,事实上,所有容器都可以通过iterator迭代器来进行遍历,首先我将以vector容器为例,解释iterator迭代器是如何实现对容器的遍历的。

迭代器

01

如何定义一个迭代器

首先是迭代器的定义“::iterator”,在iterator前面要加两个:,这里为了防止混淆,用双引号引了起来,下面给出元素类型为int的vector容器迭代器的定义示例:

vector<int>::iterator it = vector.begin();

前面的vector<int>表明了生成的迭代器是元素为int的vector容器的迭代器,it为生成的迭代器的名字。


与迭代器相关的成员函数




使用迭代器对容器进行遍历

可以使用如下方式生成迭代器并对容器内元素进行遍历:

vector<int> vec = {1, 2, 3, 4 ,5};

for (vector<int>::iterator it = vec.begin(); it != vec.end(); iter++)

{

    cout << *iter << endl;

    //下面两种方法都行,对象和引用的区别

    cout << (*iter).empty() << endl;

    cout << iter->empty() << endl;

}

//反向迭代器

for (vector<string>::reverse_iterator iter = vec.rbegin(); iter != vec.rend(); iter++)

{

    cout << *iter << endl;

}



map容器

02

map是什么

map容器运用了映射的思想,也就是key-value即键-值的思想,来实现的。内部元素按照key哈希排序。map最好用也最常用的用法就是以字符串作为key去查询操作对应的value。

注意:在查找一个不存在的key的时候,map会自动生成这个key,并且其对应的value为0



map定义与初始化

首先给出一个以string为key,int为value的map定义

Map<string,int> m;


创建map元素

若要创建map元素,有两种方式

1.以键-值的方式:前面我们提到,查找不存在的key时,map会自动生成这个key,并且value为0,因此使用可以使用形如:map[“math”] = 100;的方式创建“键”并将其对应的值赋为100。

2.使用pair数据结构:要想使用pair首先需要添加头文件utility,可以使用pair<string,int> p;创建一个pair类型的对象p,也可以通过调用make-pair()函数返回一个pair对象,其中make-pair函数需要两个参数,表明创建的pair对象的key与value的类型。在成功创建了pair后,使用map.insert(p),即可将pair对象p加入到map中。


使用迭代器遍历map

map的迭代器,定义方式与vector迭代器相似,下面给出例子:

map<string, int>::iterator it = m.begin();

在形式上与vector迭代器一致。


但需要注意的是,map的迭代器不可以和vector迭代器一样直接通过解引用来访问map的元素,因为其可以理解为是一个指向pair对象的指针,因此应当使用pair->first和pair->second分别访问所指向map元素的key和value。


访问和操作vec中的元素

除了前面提到的insert()函数外,常用的函数还有erase(),clear()等。

m.erase():参数为map中键值的类型,根据键值来删除相应的元素

m.clear():不需要参数,清除容器中所有元素

m.count():参数为键值类型,检查该键值是否在容器中,可用于避免错误的查询操作



以上就是本期的主要内容了,不管是迭代器还是map容器,这里都只给出了最常用的一些成员函数,如果大家希望更加了解这些内容并能够熟练使用,查阅资料尤其上手实践是必不可少的。下期,STL标准库之queue队列,一句话就能概括其特性的容器,其用途又有哪些呢,敬请期待!


文字 | 王瑞

责编 | 王瑞

审核 | 牟育生

以上是关于我为同学解难题⑬C++程序设计第6期:STL标准库之map容器的主要内容,如果未能解决你的问题,请参考以下文章

C++初阶:STL简介

C++初阶:STL简介

C++面试题

C++标准库 STL -- 容器源码探索

STL基础--基本介绍

C++标准模板库(STL)——vector常见用法详解