C++ STL中set、multiset、hash_set、hash_multiset,map、multimap、hash_map和hash_multimap之间的区别

1 篇文章 0 订阅

1.set和multiset的区别

set和multiset两者的底层结构都是RB-tree,两者唯一的区别是使用的insert()函数不同,set中不允许存在重复的元素,所以底层使用的插入元素函数为insert_unique();而multiset中运行存在重复元素,所以底层使用的插入元素函数为insert_equal().

2.map和multimap的区别

        同set和multiset的区别。


3.hash_set和set的区别

        hash_set和set的区别在于两者的底层结构不一样,hash_set的底层采用的是hashtable,而set的底层采用的是RB-tree。

4.hash_map和map的区别

        同hash_set和set的区别。


5.hash_set和hash_multiset的区别

        这两者底层结构都是hashtable,唯一的区别同set和multiset的区别,就是一个不存在重复元素,而hash_multiset运行存在重复元素。


注:有一种错误的理解,从名字上看,有人会认为hash_set是hashtable+set的组合,即hashtable解决冲突的方法是使用开链法,此时将开链中的节点以RB-tree的形式组织起来。这是错误的理解。hash_set本质就是hashtable的一个封装。虽然这是一种对hash_set错误的想法,但是可以作为一种新的结构来思考。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值