charpter 11 关联容器
顺序容器中的元素是按在容器中的位置来顺序保存和访问的。而关联容器中的元素是按 关键字 来保存和访问的。
- 标准库提供8种关联容器。允许重复关键字的容器的名字中都有multi。不保持关键字顺序存储的容器的名字都已unordered开头
- map,set,multimap,multiset,unordered_map,unordered_set,unordered_multimap,unordered_multiset
- map关联数组,与正常数组类似,不同之处在于其下标不必是整数,通过关键字来查找值而不是位置
- map的简单使用
map<关键字类型,值类型> 变量名
,map使用first保存关键字和second保存数值
- set计时关键字的简单集合,当只想知道一个值是否存在,set是最有用的。
- set简单实用
set<T> 变量名
- 关联容器支持普通容器操作,比如size,empty,insert,erase,clear,以及迭代器begin,end,不支持push_back之类的,关联容器都是双向的
- multi容器,允许一个关键词对应多个元素
- 自定义元素比较:
multiset<关键词,decltype(func)*> 对象名(func)
pair 类型
- 头文件utility
- pair
p // pair >p(v1,v2) - 创建pair对象。列表初始化{a,b}、make_pair(a,b)、显示构造 pair<,>(a,b)
关联容器操作
- key_type: 关键词类型
- mapped_type:值类型
- value_type:set即为关键词类型,map为pair
关联容器迭代器
- 解引用关联容器迭代器得到是value_type的值
- set的迭代器默认为const
添加和删除元素
- set添加元素,直接用.insert(begin,end)或者.insert({x,x,x});
- map添加元素 ,插入的为pair
- .insert({x,x})//
- .insert(make_pair(x,x))
- .insert(pair<,>(x,x))
- .insert(map<,>::value_type(x,x))
- insert的返回值:对于map,返回为pair,first为迭代器指向具有关键词的元素,second为bool值,表示插入成功。
- 除了普通容器的删除方法,还可以直接删除.erase(关键词),返回值为删除关键词对应元素的个数
- map的下标操作,可能会插入新元素,且map下标操作的返回值为mapped
访问元素
- 对于非重复关键字,.find和.count相同。用法:` .find(x),返回指向第一个关键字对应元素的迭代器,count返回出现个数
- 在multimap或multiset中查找元素。使用count和find,遍历整个数组
- .lower_bound(k),关键词不小于k的第一个元素,upper_bound,关键词大于k的第一个元素。均为迭代器,不适用无序容器
无序容器
。。。