map:
实现是红黑树,map内部所有的数据都是有序的,map的查询、插入、删除操作的时间复杂度都是O(logn)
map的key需要定义operator <,对于一般的数据类型已被系统实现,若是用户自定义的数据类型,则要重新定义该操作符。
unorder_map
实现是哈希表,无序,插入,查找:时间复杂度为O(1) **unordered_map的key需要定义hash_value函数并且重载operator ==。**对于一般的数据类型已被系统实现,若是用户自定义的数据类型,则要重新定义该操作符。
如果key没实现以上两个编译就会出现错误:
use of deleted function 'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unordered_map() [with _Key = std::vector<int>; _Tp = int; _Hash =
std::hash<std::vector<int> >; _Pred = std::equal_to<std::vector<int> >; _Alloc = std::allocator<std::pair<const std::vector<int>, int> >]'
哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,时间复杂度为O(1); 而代价仅仅是消耗比较多的内存。哈希表的查询时间虽然是O(1),但是并不是unordered_map查询时间一定比map短,因为实际情况中还要考虑到数据量,而且unordered_map的hash函数的构造速度也没那么快,所以不能一概而论,应该具体情况具体分析