Chapter 11 Assosiated container

2020-03-19  本文已影响0人  再凌

八种容器

set -- map
unordered
multi-

对于map, 传入的key必须有<运算符, 否则需要在第三个参数中说明自定义函数的指针, 可以写成decltype(F *), 其中F的返回值必须为bool类型

map

map中存储的每一个元素都是pair类型的, pair类型在<utility>头文件中.

pair里有两个public的变量, first和second

map中的三个类型:

  1. key_type: 即关键字类型
  2. value: pair<const key_type, mapped_type>类型
  3. mapped_type: 值的类型

map容器一般不使用algorithm算法, 因为他的key是const类型, 不可以变动

.insert()方法

如果是map.insert(), 那么插入的必须是一个pair类型. insert()返回值也是一个pair, <指向被插入的位置的迭代器, bool>

但是如果是multi-的insert(), 则返回值没有bool

.erase()方法

参数可以是迭代器, 迭代器范围或者关键字, 返回值是被删掉的个数

[ ] 和at() 和find()

对于map, 如果使用[ ], 如果遇到了不存在的关键字则自动插入,找到了则是mapped_type

如果使用find(), 找不到的时候返回尾后迭代器, 找到了则返回迭代器

如果是at(), 找不到的时候抛出out_of_range异常, 找到了则是value_type(即返回一个pair)

掐范围

.lower_band( k ) 返回不小于k的第一个迭代器
.upper_band( k ) 返回大于k的第一个迭代器
合在一起就是左闭右开区间

.equal_range() 返回一个左闭右开的区间


另一个掐范围的方法是.count()和.find()结合使用

unordered_

C++中使用hash来排列元素,用==判断不同元素, 而不是<排列元素

unordered对于内置对象和常见的STL对象实现了HASH, 其他对象需要手动指定hash函数和==操作(或者重载实现)

unordered_set<Sales_data, decltype(my_hash)*, decltype(eqop)*>

构造hash函数的时候注意返回值是size_t类型, eq函数返回值是bool类型
上一篇下一篇

猜你喜欢

热点阅读