C++中map和unordered_map的区别是什么?
1.map:
·底层:底层是红黑树。这是一种自平衡的搜索树;
·元素顺序:将元素按照键值的顺序存放;
·唯一性:不允许容器中出现键值相同的元素;
·时间复杂度:访问、插入和删除的时间复杂度都是O(log n);
·迭代器稳定性:由于底层是红黑树,所以无论进行什么操作迭代器指向的容器都不会发生改变。
2.unordered_map:
·底层:哈希表。通过哈希函数建立值与哈希表槽的唯一映射;
·元素顺序:容器中存放的元素没有顺序;
·唯一性:理论上哈希表不允许容器中出现相同的元素。如果发生哈希冲突,则会通过链表或快速寻址的机制解决;
·时间复杂度:查询操作的时间复杂度为O(1),删除或插入元素在最差情况下时间复杂度是O(n)。
·迭代器稳定性:当发生重哈希时,迭代器指向的元素可能会发生改变,即迭代器是不稳定的。
3.使用场景:
·当对容器内元素的顺序没有要求时使用unordered_map;
·当对容器内元素的顺序有要求时使用map。