unordered_map和unordered_set
1.unordered_set系列的使用
1.1 unordered_set类的介绍
1.unordered_set的声明如下:
template < class Key,class Hash = hash<Key>,class Pred = equal_to<Key>,class Alloc = allocator<Key>> class unordered_set;
key就是unoredered_set底层关键字的类型
2.unordered_set默认要求key支持转换为整形
3.unordered_set默认要求key支持比较相等
4.一般情况下都不需要传后三个模版参数
5.unodered_set底层是用哈希桶来实现的,至于哈希桶在后面的文章会有所介绍,增删查改的效率为O(1),与set的相比,迭代器的遍历不再有序(根据unordered可以看出)
1.2 unordered_set和set的使用差异
1. unoredered_set与set支持的增删查改是一样的,要想知道具体的内容可以看前面的文章,这里就不再说明了。
2.unoredr_set和set的第一个差异是对key的要求不同,set要求Key支持小于比较,而unordered_set要求Key支持转成整形且支持等于比较。
3.unoredered_set和set的第二个差异是迭代器的差异,set的iterator是双向迭代器,底层是红黑树,走有序的中序遍历,所以set的遍历是有序+去重。unordered_set是单向迭代器,底层是哈希表,迭代器的遍历是无序+去重。
4.unordered_set和set的第三个差异是性能的差异,unordered_set的增删查改的效率为O(1),而set增删查改的效率为O(logN),在绝大多数的场景下unordered_set的效率要比set的效率高。
1.3 unordered_map和map的使用差异
1.同样的,增删查改二者基本无异,这里就不一一介绍了。
2.unordered_map和map也有三点差异,与unordered_set和set一样,分别是key的要求不同,迭代器的差异,性能的差异。可以把unoreder_map当做unordered_set,map当做set,就可以知道每一个差异点的内容了,这里就不再说明一遍了。