set/multiset map/multimap hash_set/hash_multiset hash_map/hash_multimap 区别与联系

本文深入探讨了STL中set/multiset与map/multimap等容器的特点与差异,包括它们的底层实现、元素操作限制及应用场景。同时对比了基于红黑树与哈希表的不同容器在性能上的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

set/multiset

联系

底层使用红黑树作为数据结构
set/multiset 特性是所有元素都会根据元素键值自动排序,set/multiset元素的键值就是实值,实值就是键值。
不能通过迭代器来修改set/multiset的实值因为他们的实值就是键值,修改后可能不满足其排列规则
set/multiset拥有与list相同的某些性质:当客户对他的元素进行insert或erase是操作之前的所有迭代器在操作完成之后依然有效。被删除元素是例外
STL特别提供了一组set/multiset相关算法包括交集set_intersection、联集set_union、差集set_difference、对称差集set_symmetric_difference

区别

set不允许两个元素拥有相同键值所以底层插入使用红黑树的insert_unique、multiset允许两个元素拥有相同键值所以得出插入使用insert_equal

map/multimap

联系

底层使用红黑树作为数据结构
map/multimap特性所有的元素根据元素的键值自动排序,map/multimap所有元素的是pair同时拥有实值(value)和键值(key),pair的第一个元素被视为键值第二个元素被视为实值
可以通过map/multimap的迭代器来修改map/multimap的实值但是不能修改map/multimap的键值,因为键值关系着map/multimap的排列规则
map/multimap拥有与list相同的某些性质:当客户对他的元素进行insert或erase是操作之前的所有迭代器在操作完成之后依然有效。被删除元素是例外

区别

map不允许两个元素拥有相同键值所以底层插入使用红黑树的insert_unique、multimap允许两个元素拥有相同键值所以得出插入使用insert_equal

set/multiset hash_set/hash_multiset

联系

都是为了提高查找效率
提供的接口和使用方法完全相同

区别

hash_set/hash_multiset底层使用的是hashtable,其所提供的所有接口hashtable都提供了因此几乎hash_set/hash_multiset的接口都是转调hashtable的接口
红黑树有自动排序功能而hashtable没有,所以set/multiset的原素自动排序而hash_set/hash_multiset没有

map/multimap hash_map/hash_multimap

联系

都是为了提高查找效率
提供的接口和使用方法完全相同

联系

hash_set/hash_multiset底层使用的是hashtable,其所提供的所有接口hashtable都提供了因此几乎hash_set/hash_multiset的接口都是转调hashtable的接口
红黑树有自动排序功能而hashtable没有,所以set/multiset的原素自动排序而hash_set/hash_multiset没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值