前言
关联容器支持高效的关键字查找和访问。两个主要的关联容器类型是map和set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字。
特别指出,map和set都是按关键字有序保存元素。
使用map
一个经典的使用关联数组的例子是单词计数程序:
map<string, size_t> word_count;//string到size_t的空map
string word;
while (cin >> word)
++word_count[word];//提取word的计数器并将其加1
for (const auto &w : word_count)//对map中的每个元素
//打印结果
cout << w.first << " occurs " << w.second
<< ((w.second > 1) ? " times" : " time") << endl;
为了定义一个map,我们必须指定关键字和值的类型。
map保存的每个元素中,关键字是string类型,值是size_t类型。当对word_count进行下标操作时,我们使用一个string作为下标,获得与此string相关联的size_t类型的计数器。
size_t是一种机器相关的无符号类型,它被设计的足够大以便能表示内存中任意对象的大小。在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件的C++语言版本。
while循环每次从标准输入读取一个单词。它使用每个单词对word_count进行下标操作,如果word还未在map中,下标运算符会创建一个新元素,其关键字为word,值为0。不管元素是否是新创建的,将其值加1。
一旦读取完所有输入,使用范围for语句,打印每个单词和对应的计数器。当从map中提取一个元素时,会得到一个pair类型的对象。pair是一个模板类型,保存两个名为first和second的数据成员。map所使用的pair用first成员保存关键字,用second成员保存对应的值。因此,输出语句的效果是打印每个单词及其关联的计数器。