第11章 关联容器
类型map和multimap定义在头文件map中;set和multiset定义在头文件set中;无序容器则定义在头文件unordered_map和unordered_set中。
//定义形式
map<type1,type2> name;
set<type> name;
11.2 关联容器概述
- 关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back等,
11.2.2 关键字类型的要求
对于有序容器,关键字类型必须定义元素比较的方法,默认情况下,标准库使用关键字类型的<运算符来比较两个关键字。
//以multiset为例,定义一个A类型的multiset,并定义一个A类型的比较函数cmp,
bool cmp(const A &lhs, const A &rhs)
{
return lhs.data < rhs.data;
}
multiset<A,decltype(cmp)*> aset(cmp);
当用decltype获得一个函数指针类型时,必须加上一个*来指出要使用一个给定函数类型的指针,用cmp来初始化aset对象,这表示当向aset添加元素时,通过调用cmp来为这些元素排序。
11.2.3 pair类型
- 与其他标准库类型不同,pair的数据成员是public的,两个成员分别命名为first和second,定义在头文件utility中。
11.3 关联容器操作
- set的迭代器是const的,虽然set类型同时定义了iterator和const_iterator类型,但两种类型都只允许只读访问set中的元素。
- map和set类型都支持begin和end操作;
11.3.2 添加元素
11.3.3 删除元素
11.3.4 map的下标操作
对一个map使用下标操作,其行为与数组或vector上的下标操作不相同,使用一个不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中,因此只可以对非const的map使用下标操作。
11.3.5 访问元素
11.4 无序容器