八种容器
set -- map
unordered
multi-
对于map, 传入的key必须有<
运算符, 否则需要在第三个参数中说明自定义函数的指针, 可以写成decltype(F *)
, 其中F的返回值必须为bool类型
map
map中存储的每一个元素都是pair类型的, pair类型在<utility>头文件中.
pair里有两个public的变量, first和second
map中的三个类型:
- key_type: 即关键字类型
- value: pair<const key_type, mapped_type>类型
- 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类型
网友评论