1. 内部实现原理的区别
1) map
map内部实现了一个红黑树(非严格的平衡二叉树),具有自动排序功能。
红黑树每个节点都代表map的一个元素,对 map 的操作(查找、添加、删除)相当于是对红黑树的操作;
优点是:可以保证最坏情况的运行也在预期之内。
2) unorder_map
内部实现了一个哈希表 (也叫散列表),排列无序,通过把关键码值映射都hash表中一个位置来访问记录。
Hash最大的优点:是把数据的存储和查找消耗的时间大大降低,查找时间复杂度可达到O(1);
代价仅仅是:消耗比较多的内存。
2. 优缺点比较
map
优点 :有序,运行效率高,可以做到在O(logn)时间内完成查找、插入和删除。
缺点 :空间占用率高,因为内部实现了红黑树,每一个节点都需要额外保存父节点、子节点和红黑性质。
unorder_map
优点 :查找速度快。
缺点 :哈希表的建立耗费时间长。
3. 使用场景
map
适用在有序性或者对单词查询有时间要求的应用场景。
unorder_map
除了上述map的使用场景,其余情况应使用unorder_map。