您的位置:首页 > 其它

第十二篇:实用的关联容器

2017-01-26 21:13 211 查看

前言

我们可以用下标访问顺序容器的元素,也就是说在顺序容器实现中下标和元素的值相关联。那么能不能让别的值(而不是下标)与元素的值相关联呢?有的,实现这种功能的容器就叫做关联容器,而关联的本质就是某个特定的“键”与元素的值相关联。

常见的关联容器

1. map:也即关联数组,是键 - 值的集合

2. set:纯键的集合

3. multimap:map容器的“ 一键对多值 “版本

4. multiset:set容器的” 一键对多值 “版本

关联容器的特性

1. 下标访问不存在将导致容器中增加一个新的元素。

2. 可以使用count和find函数对键进行检索操作(这个特性说明可以把键看成索引)。

map容器使用范例

下面这个程序是一个微型的电话簿。该程序从当前目录载入电话簿存档文件,允许用户通过姓名在电话簿中查找其对应的电话号码并告知用户。示例电话簿文件如下:



源代码:

#include <iostream>
#include <fstream>
#include <string>
#include <map>

using namespace std;

int main()
{
cout << "请输入电话簿存档文件名: ";
string filename;
cin >> filename;

/*
* 打开文件
*/
fstream io;
io.open(filename.c_str());
if (!io) {
cout << "打开存档文件失败!" << endl;
return 1;
}

/*
* 将电话簿存至map容器
*/
map<string, string> telbook;
string name;
string tel;
while (io >> name) {
io >> tel;
// 注意这里下标使用的编程意义
telbook[name] = tel;
}
// 记得关闭流
io.close();
cout << "电话簿文件载入完毕" << endl;

/*
* 获取查询对象并返回查询结果
*/
map<string, string>::iterator it;
while (1) {
cout << "请输入查询对象( 输入#退出 ): " << endl;
cin >> name;
if (name == "#") break;
// 检索操作
it = telbook.find(name);
if (it!=telbook.end())
cout << "查找结果: " << it->second << endl << endl;
else
cout << "找不到任何记录" << endl << endl;
}

return 0;
}


运行结果:



说明

1. set容器的基本操作和map基本相同,只是其元素为纯键。

2. multimap和multiset需要注意的地方是那个find函数,我将在下篇随笔中详细讲解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: