map 字典 映射 map是一个关系式容器,以模版的方式实现。 map的底层是一个红黑树结构 map由键(key)和值(value)组成 map里所有的key都是有序的,并且不会存在重复。
原型是一个类模版:
template <template k,template v> class pair{ public: k first; v seconed; pair(k& first,v& seconed):first(first),seconed(seconed){} } //通过函数构造 pair<K,V> make_pair(K key,V value);map<int,string> m; map<int,string>m={3,“wangwu”}
插入数据:
m.insert(pair<int,string>(66,"zhangsan"); m.insert(make_pair(67, "张三")); m.insert({69,"李四"});访问数据:
cout<<m.at(66)<<endl; cout<<m[66]<<endl;注意,at不能修改数据,【】能修改数据,但使用【】时可能会产生新的节点,容易发生错乱,所以,一般来说只用【】来修改数据。如果,【】修改数据时没有找到key,则会新增一个节点。
m[66]=("小明");【】和insert的区别; insert不能够插入重复的数据,如果数据重复了,就插入无效。 【】能够插入重复的数据,如果插入重复的数据,则修改原本的数据。
map迭代器不能进行 + 和 - 运算符操作 可以使用 ++ – 运算符进行遍历
map常见用途
需要建立字符串与整数之间映射关系通过一个唯一的key来建立存储关系的 //for循环遍历 for(map<T1,T>::iterator iter=m.begin();iter!=end();iter++) { cout<<iter->first<<":"<<iter->seconed<<endl; } //foreach遍历 for (auto e:map) { cout<<e.first<<":"<<e.seconed<<endl; }有序性:map的底层是红黑树自身是有序的,不停的插入元素,总是获得有序的数据。 时间复杂度低:底层结构为红黑树,红黑树的很多操作都是在log(n)的时间复杂度下实现的 ,因此效率高。 缺点:空间占用率高,红黑树的关系,每一个节点都需要额外保存,这样使得每一个节点都需要大量空间。
特点: key的值可以重复,key的值仍然会排序; 不可以通过键的值进行访问 不可以at() 不可以operator[]
#include<unordered_map> 特点: key的值不会重复,key的值不会排序,但是会去重。 优点:内部的结构是哈希表,查找0(1),效率高。 缺点:哈希表的建立耗费时间。 应用场景:对于频繁的查找,用unordered_map更高效。 底层是一个哈希表值。 unordered_map记录元素的hash值,根据hash值判断元素是否相同。
与map的函数操作基本一致。
特点: 该容器既不排序也不去重。 底层是一个哈希表 用法与map相似。 虽然不会排序,但是重复的数据会被排列在一起。
头文件#include #include <unordered_set>
set容器相比其他容器,没有value值,而只有key值
熟悉map,multimap,unorderd_multimap,unordered_map,set的特点,优点,缺点,底层实现。 熟悉map,multimap,unorderd_multimap,unordered_map,set的函数操作。 了解迭代器输出。