1. 总结:通过此题掌握map和unordered_map两种容器的底层原理,区别,用法
2. 题意:给出一个数组,一个target,如何快速找到两个数之和等于target。
3. 题解:使用STL中的unordered_map
(1)map和unordered_map的实现机理:
map:是基于红黑树来实现的(红黑树是非常严格的平衡二叉搜索树),红黑树具有自动排序功能,红黑树的每一个节点都代表着map中的一个元素,因此对于map的查找,删除和插入操作都是对红黑树的操作。
unordered_map:是基于哈希表来实现的,查找的时间复杂度是O(1),在海量数据处理中有着广泛的应用。
(2)map和unordered_map的优缺点
map的优点:(1)map是有序的(2)基于红黑树实现,查找的时间复杂度是O(n)
map的缺点:空间占用率比较高,因为内部实现了红黑树,虽然提高了运行效率,但是每个节点都要保存父亲节点和孩子节点和红黑树的性质,使得每一个节点都占用大量的空间。
适用的情况:对于要有序的结构,适用map
unordered_map的优点:因为内部是哈希表来实现的,所以查找效率会非常高
unordered_map的缺点:哈希表的建立比较费时
适用的情况:对于查找问题,适用unordered_map会更好一点。
以上知识点:C++ map和unordered_map的区别和联系以及map的使用
(3)unordered_map.find(key): 查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
(4)对于vector,可以直接用{1,2,3}这样传入来进行初始化,类似于数组
(5)此题中注意mp[target-nums[i]]=i;语句放置位置的区别