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基于哈希表,是无序的。
浙公网安备 33010602011771号