map容器是一个键值对key-value的映射。其内部实现是一棵以key为关键码的红黑树(平衡树的一种)。map的key和value可以是任意的数据类型(包括int、double、long long、string、struct、vector、queue等等)。这里不对map的原理进行深入研究,只研究它的一些简单应用(复杂的不会qwq)。
1.map的声明方法:
①.map数据结构包含在<map>的头文件中
②.map的定义方式:map的定义方式为“map<key_type,value_type> name”,其中key_type表示的是被映射的数据类型,相当于自变量x的数据类型;value_type表示的是映射到的数据类型,相当于因变量y,name则表示映射名。
举例:
map<long long,bool> vis;
定义了一个将long long类型数据映射到bool类型上的映射map;
map<string,int> hash;
定义了一个将string类型数据映射到int类型上的映射hash;
这里的hash表示哈希,是一种常见的解决查找字符串问题的方法,其原理便是将字符串映射为一个数字。
map< pair<int,int>, vector<int> > test;
将一个pair二元组映射到一个动态数组vector上。
2.map的操作:
①. size/empty/clear:
分别表示查询一个映射的元素个数、是否为空、清空。
②.[ ]操作符:
h[key]返回映射h中的自变量key映射到的value的值。
好处:可以通过h[key]的操作来查询k映射到的value的值并进行修改(这样可以避免枚举耗时)。
3.map与哈希函数的联系和区别
map和哈希函数其应用都是将复杂的字符串等数据转化为简单的数字进行处理。相比之下,哈希函数要更加复杂,而map的实现相对简单。但是,由于map的实现内部是一棵红黑树,这就导致[ ]操作符的时间复杂度并不是O(1),而是O(log n),相比之下哈希函数的实现是O(1)的。所以在一些特殊的情况下,map会超时。