关联容器支持高效的关键字查找和访问。两个主要的关联容器类型是map和set。类型map和multimap定义在头文件map中;set和multiset定义在头文件set中;无序容器则定义在头文件unordered_map和unordered_set中。
map是关键字-值对的集合。map类型通常被称为关联数组。我们通过一个关键字而不是位置来查找值,给定一个名字到电话号码的map,我们可以使用一个人的名字作为下标来获取此人的电话号码。
与之相对,set就是关键字的简单集合。当只是想知道一个值是否存在时,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;
使用set
例如:
//统计输入中每个单词出现的次数
map<string,size_t> word_count; //从string到size_t的空map
set<string> exclude={"The","But","And","Or","An","A",
"the","but","and","or","an","a"};
string word;
while(cin>word)
//只统计不在exclude中的单词
if(exclude.find[word]==exclude.end())
++word_count[word]; //获取并递增word的计数器