【C++】学习笔记(十二)----set和unordered_set、map和unordered_map区别


区别:set和map都是基于红黑树实现,红黑树本事具有 自动排序的功能,所以set和map内部的数据是有序的

unordered_set和unordered_map是基于哈希表(散列表)来实现的,本身内部数据通常处于无序状态

set、map和unordered_set、unordered_map常见操作的时间复杂度

set unordered_set map unordered_map
实现 红黑树 哈希表(散列表) 红黑树 哈希表(散列表)
有序性 有序 无序 有序 无序
插入时间复杂度 O(logN) O(1) O(logN) O(1)
删除时间复杂度 O(logN) O(1) O(logN) O(1)
查找时间复杂度 O(logN) O(1) O(logN) O(1)

注意:unordered_set、unordered_map的O(1)的查找效率是在数据没有冲突的情况下,若数据存在冲突时间复杂度最差达到O(N)

set、map和unordered_set、unordered_map相比而言的优缺点

set、map:

  • 优点:

    • 有序性
  • 缺点:

    • 查找的时间复杂度相对于unordered_set、unordered_map来说高一点

    • 空间占用率高,红黑树每个结点需要额外存储父节点和孩子结点

unordered_set、unordered_map

  • 优点:

    • 查找的时间复杂度低,可以达到常数级别
  • 缺点:

    • 无序性
    • 哈希表的构造速度慢

注意:由于哈希表的插入存在哈希函数(散列函数),所以遍历哈希表时候的顺序不一定是向哈希表中插入时候的顺序

unordered_set、unordered_map适用于查找比较频繁且内部数据冲突比较小的情况下,而map适用于对于顺序有一定要求的情况下

unordered_set、unordered_map注意事项

set和unordered_set、map和unordered_map的使用上并无太大区别

需要注意的是由于是由哈希表实现的,C++中使用vector充当桶,且需要确保<>中第一个数据类型是可哈希的,一般都是基本类型

参考:

c++中map与unordered_map的区别

(2条消息) c++中map与unordered_map的区别_wolfrevoda的博客-CSDN博客_c++ map unordered_map

哎,红黑树和哈希表,面试问三次了!

哎,红黑树和哈希表,面试问三次了! - 知乎 (zhihu.com)

unordered_map的键的类型问题

unordered_map的键的类型问题 - 知乎 (zhihu.com)

猜你喜欢

转载自blog.csdn.net/weixin_50202509/article/details/126960714