第十二篇:实用的关联容器
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函数,我将在下篇随笔中详细讲解。
相关文章推荐
- 实用的关联容器
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- 关联容器
- STL源码剖析——关联容器之hash_multiset
- 关联容器基础(一)
- STL之关联容器(pair、map、set的使用)
- C++复习 10 关联容器
- STL中关联容器map的用法
- 为包含指针的关联容器指定比较类型
- C++容器:顺序容器,关联容器
- C++ 关联容器之map插入相同键元素与查找元素操作
- map关联容器
- 使用 库创建重复键关联容器
- c++ Map关联容器学习(一)
- C++ map关联容器删除元素
- C++标准库关联容器
- 使用map关联容器
- C++之STL中常用关联容器使用方法
- STL 关联容器之集合和多重集合
- Chapter 16.关联容器multiset