STL关联容器MAP、SET与multimap、multiset与hashmap、hashset的区别

MAP:底层用红黑树RB_tree实现,在查找、删除、添加等操作都有很高的效率,而且是排好序的,且不允许重复。

hashmap:重点是map,底层基于hashtable实现,哈希表即是散列表,实质是一个数组。Hashmap就是中和了数组和链表的有点,找到了一个寻址容易同时插入删除也容易的方法,它采用的是数组+链表的实现方式。优点是查找、删除、添加的时间复杂度为O(1);缺点也很明显,就是不能有重复,不能排序,占用内存大,只能处理char,int,short等类型,不能处理string,double,float类型,想要处理的话必须自己加hash function,由于不是C++标准,移植性需要考虑在内。

set主要是集合功能,底层采用红黑树,默认排好序。hashset底层通过hashtable实现。

总结:加有hash几个字的一些结构,底层都是由hashtable来提供的,不加的都是由红黑树来提供

set和multiset的区别就是后者允许键值重复,map和multimap也一样。实现时通过insert_equal()和insert_unique)来控制。


底层实现

优点

缺点

map

红黑树

添加、删除、查找速度快,默认排好序,键值唯一,占用内存少

添加、删除、查找速度比hashmap

hashmap

哈希表(实质是数组)

添加、删除、查找速度比map更快,常数级,不排序,键值唯一

占用内存多

multimap

红黑树

map相同,多了键值不唯一

添加、删除、查找速度比hashmap

set

红黑树

添加、删除、查找速度快,默认排好序,值唯一,占用内存少

添加、删除、查找速度比hashset

hashset

哈希表(实质是数组)

添加、删除、查找速度比map更快,常数级,不排序,值唯一

占用内存多

multiset

红黑树

set相同,多了值不唯一

添加、删除、查找速度比hashset


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值