数据结构 哈希表与红黑树

哈希表与红黑树

数据结构: 

红黑树是一种 BST,知道是BST就挺好懂了,肯定是有序的,而且是链式结构,空间没有问题;红黑树 RBT有他特别的把节点标色的方法,所以最坏情况是O(logn);

文章里说,哈希表如果理解成数组: key=下标;value=元素值,所以他的查找是O(1)的,没错吧,但也具有了数组的问题:提前分配够空间大小,其次也是无序的;

unordered_set/unordered_map 的底层实现肯定是哈希表没错了,因为unordered代表的就是无序,其他有序的底层实现就是红黑树了;

注意一个点,vector是不能哈希的,因此,底层哈希表的无序表是不能以vector为键值的;

但是红黑树的有序表就可以;

Map

map是用来存key-value的,是可以用来存一些可能会重复的东西(比如节点)我们还可以用key获取他,也可以用来计次;

Set

set则是用来去重的,或者说保证唯一的;

无序容器

在无序的情况下,

在 C++ 中,std::unordered_seterase 操作的平均时间复杂度是 O(1)。这是因为 std::unordered_set 是通过哈希表实现的,其中元素的存储和访问是基于哈希值进行的,而不是基于元素的位置。因此,对于 std::unordered_set,在平均情况下,插入、查找和删除操作的时间复杂度都是 O(1)。

在 C++ 中,std::vectorerase 操作的时间复杂度是 O(n),其中 n 是 std::vector 中的元素数量。这是因为 std::vector 是基于数组实现的,当你删除一个元素时,它会触发一系列的元素移动操作,以保持元素的连续存储。具体来说,erase 操作会将被删除元素后面的所有元素向前移动,填补被删除元素的位置。

如果你删除的是尾部元素(即最后一个元素),则 erase 操作的时间复杂度是常数时间 O(1)。这是因为删除尾部元素时,不需要进行元素的移动操作,只需要更新 std::vector 的大小。

所以vec的是O(n),而set却是O(1);

有序容器

由于有序容器是用红黑树实现的,时间复杂度和空间复杂度为O(logn),但如果数量级很小,其实什么复杂度都可以认为是常熟级的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值