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

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没有

你可能感兴趣的:(C++,数据结构)