CppPrimer笔记 Chapter11 关联容器
标签: Cpp
关联容器类型
- 按关键字有序保存元素
- map 不可重复,平衡二叉树
- set 不可重复,红黑树
- multimap 可重复
- multiset 可重复
- 无序集合
- unordered_map 无序不可重复,hash
- unordered_set 无序不可重复,hash
- unordered_multimap 无序可重复,Hash
- unordered_multimap 无序可重复,Hash
关联容器概述(11.2)
- 对有序容器,关键字类型必须定义比较方法,默认情况下使用
<
multiset<X, decltype(my_compare)*> bookStore(my_compare);
利用自定义比较操作- 利用
pair
用作返回值 value_type
对于map
返回pair<const key_type, mapped_type>
set
迭代器是const
的- 向
map
与set
添加一个已存在关键字的元素,对容器没有任何影响.(不会刷map的key新值) map
下标运算符,当未找到时会插入.那么只能对非const得map使用下标操作.利用at()
为只读,未找到会抛出异常.只查找,利用find
无序容器(11.4)
- 默认情况下,无需容器使用
==
来比较元素,还使用hash<key_type>
生成哈希值.对内置类型,string等有内置的hash.为自己的类定义hash定义自己的hash - 利用内置hash处理自定义类型的无序容器
size_t hasher(const Sales_data &sd);
bool eqOp(const Sales_data&lhs, const Sales_data &rhs);
SD_multiset = unordered_multiset<Sales_data,
decltype(hasher)*,
decltype(eqOp)*> bookStore(42, hasher, eqOp);