目录
一.unordered_set
1.1 库原型
- 默认Key为整形,如果不支持转为整形需要传第二个模板参数,以仿函数的形式实现自己的转换
- Key要求支持等于比较,如果不支持需要以仿函数的形式传第三个模板参数
1.2 本质
- unordered_set的底层是用哈希桶实现的
- 增删查的平均效率是O(1)
1.3 使用
unordered_set的增删查改的操作与set一模一样,请参考STL-set/multiset关联式容器-优快云博客.本文着重阐述unordered_set的与set区别的地方
1.3.0 迭代器
unordered_s的iterator是单向迭代器,set的iterator是双向迭代器
函数 | 功能描述 | 参数 | 返回类型/说明 |
---|---|---|---|
begin(size_type n) | 返回指向指定桶(索引为 n )首元素的迭代器(非常量版本)。 | n (桶的索引) | local_iterator (正向迭代器) |
end(size_type n) | 返回指向指定桶(索引为 n )末尾的迭代器(非常量版本)。 | n (桶的索引) | local_iterator |
cbegin(size_type n) | 常量版本的 begin(n) ,用于常量容器。 | n (桶的索引) | const_local_iterator |
cend(size_type n) | 常量版本的 end(n) ,用于常量容器。 | n (桶的索引) | const_local_iterator |
1.3.1 桶操作
函数 | 功能描述 | 参数 | 返回类型/说明 |
---|---|---|---|
bucket_count() | 返回容器中当前桶的数量。 | 无 | size_type (整数类型) |
max_bucket_count() | 返回容器可支持的最大桶数(由系统或库限制决定)。 | 无 | size_type |
bucket_size(size_type n) | 返回指定桶(索引为 n )中的元素数量。 | n (桶的索引) | size_type |
bucket(const Key& key) | 返回包含指定键 key 的桶的索引。即使键不存在,也会返回可能的桶索引。 | key (要查询的键) | size_type (桶的索引) |
1.4 与set的区别
- set要求Key支持小于比较,而unordered_set要求支持等于比较
- set底层是红黑树,走中序遍历是有序的.而unordered_set底层是哈希表,迭代器遍历是无序的且会去重
- set底层是红黑树,它的效率是O(logN),而unordered_set底层是哈希表,它的效率是O(1)
二.unordered_map
2.1库原型
- 默认Key为整形,如果不支持转为整形需要传第二个模板参数,以仿函数的形式实现自己的转换
- Key要求支持等于比较,如果不支持需要以仿函数的形式传第三个模板参数
2.2本质
- unordered_set的底层是用哈希桶实现的
- 增删查的平均效率是O(1)
2.3使用
unordered_map的增删查改的操作与map一模一样,请参考:STL-map/multimap关联式容器_multimap容器-优快云博客
其余迭代器和桶操作以及与map的区别与上述的unordered_set一样,本文就不再赘述.