1.关联容器
关联容器中的元素是按关键字来保存和访问的,反映了关键字的作用。
关联容器支持高效的关键字查找和访问,主要关联容器类型是map和set。
map中的元素是一些关键字-值,关键字起到索引的作用,值表示与索引相关联的数据。
map<key,value>
set中的每个元素只包含一个关键字,支持高效的关键字查询操作。
set<key>
类型map和multimap定义在头文件map中,set和multiset定义在头文件set中,无序容器则定义在头文件unordered_map和unordered_set中。
map | 关联数组,保存关键字_值对 |
set | 关键字即是值,只保存关键字的容器 |
multimap | 关键字可重复出现的map |
multiset | 关键字可重复出现的set |
unordered_map | 用哈希函数组织的map |
unordered_set | 用哈希函数组织的set |
unordered_multimap | 关键字可重复的哈希map |
unordered_multiset | 关键字可重复的哈希set |
2.使用关联容器
set<string> exclude = {"but","or","end","and"};
map类型通常被称为关联数组,与数组不同之处在于map的下标不一定是整数。
set是关键字的简单集合,用于查找某个值是否存在。
map<string,size_t> words;
类似于顺序容器,关联容器也是模板,定义map时必须指定关键字和值的类型。
从map中提取一个元素时,会得到一个pair类型的对象。
pair是一个模板类型,保存两个名为first和second的数据成员。
first成员保存关键字,second成员保存对应的值。
set容器起到类似于黑名单、白名单的作用。
与顺序容器相似,我们可以对一个关联容器的元素进行列表初始化。
set<string> exclude = {"the","end","and"};
3.关联容器概述
由于关联容器中元素是根据关键字存储的,因此关联容器不支持顺序容器的位置相关的操作。
每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。
map<string,size_t> words; //空容器
使用列表初始化空容器map,要将每个关键字_值对包围在花括号中。
map<string,string> authors = {
{"lisi","lizhenyuan"},{"zhangsan","zhangsan2"}};
一个map或set中的关键字必须是唯一的。
容器multimap和multiset允许多个元素具有相同的关键字。
set容器会自动忽略具有相同的关键字的元素,不会报错。
3.1、关键字类型的要求
对于有序容器来说,关键字类型必须定义元素比较的方法。
默认情况下,标准库使用关键字类型的<运算符来比较两个关键字。
我们可以提供自己定义的比较函数来替代