第7章 使用关联容器

新概念:关联容器 “键-值”对

 

关联容器,其名字一分为二(关联-容器)。那么首先它是一种容器,容器这个概念已经在前面的章节介绍过了,那么关联是什么意思呢?它作为容器,它就得存储一系列数据,但是它却和我们之前看到的所有容器都不同,它存储的数据和某种“键”具有关联性。这和我们前面的“索引”和值之间的关联有些类似,不同之处是,“索引”和值仅仅是暂时的关联,当容器发生变化的时候,这种关联就可能会失去。但是关联容器中的“键-值”关联是真正的关联,它不会因为容器的变化而变化。

 

“键-值”对就是构成关联容器的基本元素。其实就是两种数据,我们认为的将其中一种数据赋予键的特性,让其成为索引另一个数据的依据;而将另一种数据作为值,可以由“键”索引到。“键”可以是任何可以比较的类型,比如我们可以将字符串作为键去查找整型值,这就类似我们的通过名字查找电话号码。

 

 

新设施:std::mapstd::pair

 

本章主要介绍了标准库关联容器中的一种std::map。而这个关联容器中的元素(也就是“键-值”对)是标准库类型std::pair,这是个简单的类型,仅仅是将两种类型放到一起形成对而已。std::map和其他容器一样具有插入、删除、索引、遍历等操作,但它的内部存储结构是对我们隐藏了的。它通过一些便于索引的数据结构(平衡树)来存放数据,尽可能的让我们使用起来更为方便高效(虽然性能上可能比不上通过散列存储的无序容器,但供普通用户使用足矣)。std::map也提供我们之前看到的容器访问方式“[]”,通过方括号来访问某个元素,不同的是参数是键类型。

 

注意:关联容器中的operator[]

 

前面说到了std::map可以通过操作符[]进行元素访问,但是这个操作符在关联容器中有个副作用值得大家注意。当参数键值在关联容器中不索引任何值(即不存在这个键-值对),那么关联容器将会创建一个,并会使用默认初始化去初始化值。例如我们有一个std::map<std::string, int> counters;这样的关联容器,

其中不存在(name-100)这样一个键-值对,如果我们写了counters[name];这样一行看似没有任何作用的代码,但是在我们关联容器中却会带来变化,counters会增加一个键-值对(name-0),因为内置类型的默认初始化为0(等同于int())。

这样的效果不容易被发现,所以大家在使用的时候千万要注意。

 

特别说明:我将本章概念提前知内容放得很少,因为我将在课堂上将上面几章的所有示例代码进行讲解,到时候我会给大家代码的副本。

 

下一课:C++课堂第8章 编写泛型函数 希望我的课堂对大家学习C++有所帮助

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值