iOS中的集合和STL 中的集合有什么不一样的地方?
NSSet/NSMutiSet
无序
不可重复
底层应该是使用了NSHashTable来实现的。 (hash 算法)
NSHashTable 和NSMapTable对应的集合关系
参考 NSDictionary和NSMaptable, NSArray,NSSet,NSOrderedSet和NSHashTable 区别
NSMutableOrderedSet/NSOrderedSet 作用
保持了NSSet的元素不可重复和 NSArray的索引有序。
STL 上的Set/mutiSet 和hash_set 以及hash_mutiset
Set
相当于NSOrderSet的一半部分咯。
1)所有元素都会根据元素的键值自动被排序,
- set的键值就是实值,set 不允许两个元素是相同的。
- 具有集合的基本操作: 交、并、减、合等基本操作。。
- 底层基于RB-tree 来实现的。
MutiSet
和set基本相同,唯一区别:允许键值重复。
hash_set:
底层调用了 RB-tree 或者hashTable ,Note:hashTable没有排序,RB-tree 是有排序的。
使用上和hash_set 完全是一样的。
Map/mutimap & hashMap/hash_mutimap
map 上是使用RB-tree , 所以是有序的
hash_map 底层就是使用了hashTable 的方式,
unorder_map 这个是无需的map,底层基于hashTable
PS : 底层个无非两种, 一种是RB-tree有序, 一种是HashTable是无序的。
网友评论