C++primer 第十一章笔记 初稿
2017-04-09 00:05
239 查看
11.1 使用关联容器
分类有序容器
map
set
multimap
multiset
无序容器
unordered_map
unordered_set
unordered_multimap
unordered_multiset
注:set只储存key,map储存key/value,有multi前缀的key可重复。
map的基本使用
经常使用下标运算符访问map中的值,下标为键。当map中并未存在对应键时,则下标运算符会创建一个新元素,其键为下标值,并为其初始化。
set的基本操作
经常使用find函数来确认是否存在对应键。
11.2 关联容器概述
顺序容器中的很多操作,包括位置操作、插入操作等,对关联容器没有意义,因此也不被关联容器支持。初始化关联容器方式与顺序容器类似,既可以列表初始化,也可以拷
注:对非multi前缀的关联容器,初始化时会自动过滤重复键(键值对)
关键字必须严格弱序,在定义关联容器时,可以指定自定义的比较函数,例如
bool compare(const A& a1, const A& a2){...} multiset<A, decltype(compareA)*> set1(compare);
其中比较操作类型为函数指针。
pair类型
头文件:utility
访问权限:public
成员:first、second
创建方式:
括号初始化或列表初始化
make_pair(v1,v2)
pair
11.3 关联容器操作
类型别名(通过域操作符使用)key_type:键类型
mapped_type:值类型
value_type:对于set为键类型,对于map为pair类型;
注:map的value_type所生成的pair,其键类型为const类型。
迭代器
无论是否为const迭代器,都不可以改变键;
常用inserter插入值或对;
泛型算法
一般使用关联容器自带的find算法。
通过inserter来将关联容器作为一个目的位置。
不存在copy(c.begin(),v.end(),back_inserter(c))。
删除:实参为键或迭代器
下标
注:关联容器的下标返回类型与解引用迭代器返回类型不同。下标返回mapped_type,而解引用返回value_type。
find与count
可以避免下标带来的键增加;
利用关联容器中,键相同的元素相邻存储的特性,可以结合find与count,利用迭代器遍历同键元素。
注:通过lower_bound和upper_bound迭代器也可以实现相似操作。
11.4 无序容器
组织方式:哈希函数和==运算符有序容器与无序容器可以实现相互转化;
存储方式:桶(性能依赖于哈希函数及桶的数量和大小);
生成哈希值
使用hash类型对象生成
标准库为内置类型定义了hash模板
自定义类型需要提供自己的hash模板
//未重载 == 运算符 unordered_multiset<Class, decltype(hasher)*, decltype(eqOp)*>; //重载了 == 运算符 unordered_multiset<Class, decltype(hasher)*>;
相关文章推荐
- C++primer 第九章笔记 初稿
- C++primer 第二章笔记 初稿
- C++primer第五版笔记-第十一章关联容器
- C++primer 第三章笔记 初稿
- C++primer 第十三章笔记 初稿
- C++primer 第七章笔记 初稿
- C++primer 第十章笔记 初稿
- C++primer 第六章笔记 初稿
- C++primer 第十五章笔记 初稿
- C++primer 第十六章笔记 初稿
- C++primer第五版第十一章学习笔记
- C++primer 第四章笔记 初稿
- C++primer 第五章笔记 初稿
- C++primer 第十四章笔记 初稿
- 系统架构师学习笔记_第十一章(下)_连载
- C++Primer学习笔记第五章(5/18)表达式
- 090518-C++primer 4th学习笔记:1.3节
- 系统架构师学习笔记_第十一章(上)_连载
- Javascript高级程序设计第二版第十一章--DOM2,DOM3--笔记
- Modern C++ Design 笔记 第十一章 MultiMethods(3)收藏