map/multimap/unordered_map/unordered_multimap; set/multiset/unordered_set/unordered_multiset

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/



你可能感兴趣的:(c/c++相关)