1. unordered_map
unordered_map的底层是一个防冗余的哈希表(采用除留余数法)。哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,时间复杂度为O(1);而代价仅仅是消耗比较多的内存。
1.1. unordered_map 与map的区别?使用场景
构造函数:unordered_map 需要hash函数,等于函数;
map只需要比较函数(小于函数).
存储结构:unordered_map 采用hash表存储,
map一般采用红黑树(RB Tree) 实现。因此其memory数据结构是不一样的。
总体来说,unordered_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑unordered_map 。但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,unordered_map 可能会让你陷入尴尬,特别是当你的unordered_map 对象特别多时,你就更无法控制了,而且unordered_map 的构造速度较慢。
2. unordered_set
2.1. unordered_map、unordered_set的常用函数
unordered_map.begin() //返回指向容器起始位置的迭代器(iterator)
unordered_map.end() //返回指向容器末尾位置的迭代器
unordered_map.cbegin() //返回指向容器起始位置的常迭代器(const_iterator)
unordered_map.cend() //返回指向容器末尾位置的常迭代器
unordered_map.size() //返回有效元素个数
unordered_map.insert(key) //插入元素
unordered_map.find(key) //查找元素,返回迭代器
unordered_map.count(key) //返回匹配给定主键的元素的个数