map/multimap/unordered_map/unordered_multimap
其元素都是一个pair,即key-value映射,variable[key]=value;
map的key是唯一的,但multimap的key允许重复,他们都是由RB TREE实现的;
注意: map和multimap(实际上RB TREE)find是复杂度log(size);
insert的时间复杂度是Nlog(N+size),其中N为要插入的元素的个数,如果排序后,还能在优化
cplusplus上map http://www.cplusplus.com/reference/map/map/;
cplusplus上multimap http://www.cplusplus.com/reference/map/multimap/
unordered_map/unordered_multimap底层是由hash table实现的
unordered_map的key是唯一的,但unordered_multimap的key允许重复;
对这两种容器(实际是hash table)使用find平均下是常数时间,最坏情况下是遍历整个容器
而他们insert时候:
只插入一个元素: 平均情况是常数时间,最坏是整个size;
插入多个元素: 平均是N(N插入元素的个数),最坏N*(size+1)
还可能存在rehash情况(并未考虑到复杂度中)
cplusplus上unordered_map http://www.cplusplus.com/reference/unordered_map/unordered_map/
cplusplus上unordered_multimap http://www.cplusplus.com/reference/unordered_map/unordered_multimap/
set/multiset/unordered_set/unordered_multiset
这一系列容器容器就是集合了
set元素唯一,multiset元素允许重复,底层仍然有RB tree实现
注意: set和multiset(实际上RB TREE)find是复杂度log(size);
insert的时间复杂度是Nlog(N+size),其中N为要插入的元素的个数,如果排序后,还能在优化
cplusplus上set http://www.cplusplus.com/reference/set/set/
cplusplus上multiset http://www.cplusplus.com/reference/set/multiset/
unordered_set元素唯一,unordered_multiset元素允许重复,底层仍然有hash table实现
对这两种容器(实际是hash table)使用find平均下是常数时间,最坏情况下是遍历整个容器
而他们insert时候:
只插入一个元素: 平均情况是常数时间,最坏是整个size;
插入多个元素: 平均是N(N插入元素的个数),最坏N*(size+1)
还可能存在rehash情况(并未考虑到复杂度中)
cplusplus上unordered_set http://www.cplusplus.com/reference/unordered_set/unordered_set/
cplusplus上unordered_multiset http://www.cplusplus.com/reference/unordered_set/unordered_multiset/