前言
我们可以用下标访问顺序容器的元素,也就是说在顺序容器实现中下标和元素的值相关联。那么能不能让别的值(而不是下标)与元素的值相关联呢?有的,实现这种功能的容器就叫做关联容器,而关联的本质就是某个特定的“键”与元素的值相关联。
常见的关联容器
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函数,我将在下篇随笔中详细讲解。 点此传送
原文:http://www.cnblogs.com/scut-fm/p/3222598.html