WEB开发网
开发学院软件开发VC 使用 <map> 库创建关联容器 阅读

使用 <map> 库创建关联容器

 2007-03-15 21:55:27 来源:WEB开发网   
核心提示: Bob 35Bob 90Jane 80.25Sue 100Jane 65.5你的应用程序必须汇总所有代理的奖金并将每个代理的奖金总数显示出来.首先,创建一个 map,使用 <map> 库创建关联容器(3),然后读取该数据文件:map <string, double>
Bob 35
Bob 90
Jane 80.25
Sue 100
Jane 65.5

你的应用程序必须汇总所有代理的奖金并将每个代理的奖金总数显示出来.首先,创建一个 map,然后读取该数据文件:

map <string, double> bonuses;
string agent;
double bonus=0;
ifstream bonusfile("bonuses.dat");
if(!bonusfile)
{
  // 报告出错信息并终止程序
}
while (bonusfile >> agent >> bonus)
{
  bonuses[agent]+=bonus;// 累加每个代理的奖金
}

不管理相不相信,就这么简单!且让我们来分析一下该循环。打开数据文件之后,while 循环读取每个值对,并将其存入 agent 和 bouns 对象。接着,它将 agent 和 bouns 插入到该 map。此处的关键技巧是:如果键值(agent)已经存在,那么 += 操作符便将最新读取的 bouns 累加到存储在 map 中当前的 bouns 中。因为表达式:

map[key]

返回与键值关联的值。当重载的 += 操作符被调用时,该值便被累加到新读取的 bouns 中。最后累加的和覆盖 map 中旧的关联值。记住:当你使用下标算符机制时,纯粹的赋值操作并不会改写现有的值,只有重载的 += 才这么做。

幸运的是,map 并不包含一个必须要初始化的键值,表达式:

map[key]

返回默认的初始化 T,而 T 在上述例子中是 double 类型。默认的初始值为 0。至此,map 包含代理及其奖金汇总值对。下面的循环用来显示这些值对,输出如图一所示:

for(CIT p=bonuses.begin(); p!=bonuses.end(); ++p)
{
  cout << p->first <<''  '' << p->second <<endl;
}

图一 代理奖金汇总数

散列的关联容器

标准库目前还不提供散列关联容器。这种容器可以大大改进性能,因为它们使用散列算法从原来的字符串索引派生短键值。但是,许多 IDEs 提供非标准散列容器扩展。值得庆幸的是,新的 C++0X 标准弥补了这一点,在 C++ 中添加了一组散列容器和与之相关的算法。

作者简介

Danny Kalev 是一名通过认证的系统分析师,专攻 C++ 和形式语言理论的软件工程师。1997 年到 2000 年期间,他是 C++ 标准委员会成员。最近他以优异成绩完成了他在普通语言学研究方面的硕士论文。 业余时间他喜欢听古典音乐,阅读维多利亚时期的文学作品,研究 Hittite、Basque 和 Irish Gaelic 这样的自然语言。其它兴趣包括考古和地理。Danny 时常到一些 C++ 论坛并定期为不同的 C++ 网站和杂志撰写文章。他还在教育机构讲授程序设计语言和应用语言课程。

上一页  1 2 3 

Tags:使用 lt map

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接