1.map、set的底层是什么?为什么?
是红黑树,之所以用红黑树是因为红黑树相比普通的平衡二叉树,插入和删除元素时红黑树 的旋转次数少。红黑树的特点保证其插入最多只需旋转两次,删除最多旋转3次。红黑树在查找,插入删除的性能都是O(logn)
2. 请你回答一下map和unordered_map优点和缺点(前者红黑树有序,后者hash table无序)
对于map,其底层是基于红黑树实现的,优点如下:
1)有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作
2)map的查找、删除、增加等一系列操作时间复杂度稳定,都为logn
缺点如下:
1)查找、删除、增加等操作平均时间复杂度较慢,与n相关,
对于unordered_map来说,其底层是一个哈希表,优点如下:
查找、删除、添加的速度快,理论上时间复杂度为常数级O(c)
缺点如下:
因为unordered_map内部基于哈希表,以(key,value)对的形式存储,因此空间占用率高
Unordered_map的查找、删除、添加的时间复杂度不稳定,平均为O(c),取决于哈希函数。极端情况下可能为O(n)