2021-4-1 C++ STL之unordered_map、set、unordered_set

unordered_map

unordered_map底层实现是哈希表,所以不会根据key来排序
undered_map<T1,T2> um;		//T1是key值,T2是value值,初始的时候 um 是空映射

unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。

unordered_map可类比于Python中的字典。其实现使用了哈希表,可以以O(1)的时间复杂度访问到对应元素,但缺点是有 较高的额外空间复杂度。与之对应,STL中的map对应的数据结构是红黑树,红黑树内的数据时有序的,在红黑树上查找的时 间复杂度是O(logN),相对于unordered_map的查询速度有所下降,但额外空间开销减小。

set

set<T> s;	//自动排序,自动去重

插入和删除

用 insert( ) 方法向集合中插入一个新的元素。注意如果集合中已经存在了某个元素,再次插入不会产生任何效果,集合中是不会出现重复元素的。

set<string> country;  		// {}
country.insert("China"); 	// {"China"}
country.insert("America"); 	// { "America","China"}根据字典序自动排序了
country.erase("China");		// {"America"}

遍历

和正常遍历没有区别,用*取值

底层是红黑树

unorderd_set

unordered_set和set:
unordered_set基于哈希表,是无序的。

posted @ 2021-04-01 19:28  shenlei_blog  阅读(398)  评论(0)    收藏  举报