map
概述
头文件:map
声明:map<string, int> person
功能:建立一个key-value二元组的映射集合,对于每个节点,可以修改value值,不能修改key值。
查找某个key值对应的节点时,时间复杂度是O(logn)的。
插入
insert方法
使用insert插入,传递的参数必须是对应数据类型的pair型数据,如对于上述的person,可以有:
person.insert(make_pair(“张三”, 19))
插入value_type型数据
类似于insert方法,但使用map类内部的value_type
person.insert(map<string, int>::value_type(“张三”, 19))
数组方法插入
person[“张三”] = 19
三种方式都可以实现对一个已经存在的map型对象插入数据,但使用insert方法时,必须保证该map中对应key之前不存在,否则将无法插入,而使用数组方式时,若该key之前存在,则会覆盖原来的值。
如果使用以下代码:
person[“李四”]++
而之前李四并不存在的话,则会自动创建一个李四,值会在0的基础上增加
遍历
遍历map类似于STL中其他容器的遍历。
正向遍历
使用正向迭代器
for(map<string, int>::iterator i = person.begin(); i != person.end(); ++i)
反向遍历
使用反向迭代器
for(map<string, int>::reverse_iterator i = person.rbegin(); i != person.rend(); ++i)
注意迭代器的类型是一个指向对应类型pair的指针,需要取出key时,用i->first,取出value时,用i->second
查找
find
find函数也是STL容器里常见的函数,用来查找容器中有没有对应的值,如果查找成功,返回对应元素的迭代器,如果查找失败,返回对应容器的end()函数值。
对应map类型的对象进行查找时,find传递的是对应的key值
count
用来统计某个对象出现的次数,在map中,传进想要查找的key,因为最多出现一次,所以若返回1说明元素存在,0说明不存在
删除
使用erase函数
有三种方法:
传递key值
传递迭代器值
传递迭代器范围,如person.erase(begin(),end())表示删除所有元素