STL容器

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())表示删除所有元素