关于STL的map的注意事项

关于map是什么,这里就不多叙述了。

直接正题,常用的map插入操作有三种方法:通过pair<key_type,value_type>、通过value_type插入数据、还有一种类似于数组的形式插入数据,关键字就是数组下标。

关于三种插入方式的区别:前两者的效果是一样的,但是由于数据集合唯一性,如果一个key对应的value上有值的话,那么再次往这个key上插入一个新的value会失败,

可以使用pair模板类型进行测试。

由于map是有序的,所以查找的话可以直接使用key进行查找,比如说find(key)就可以查到key对应的value了,find函数如果查到就返回对应的迭代器的位置,若没找到就是返回end()函数的位置。

使用迭代器获取map中的数据,其数据类型是一个std::pair对象,包括first成员和second成员,对应的是key和value。

lower_bound():用于返回key关键字在map中的下界;

upper_bound():用于返回key关键字在map中的上界;

理解:若找到key,那么两个函数都是返回他们的对应的迭代器,若没找到,那么lower_bound函数返回距离查找的key最近的下界的那个key对应的迭代器,upper_bound与此相反。

Equal_range():返回一个std::pair对象,它有三个参数,前两个是指定序列的正向迭代器,最后一个参数是要查询的元素,其first指向的是不小于第三个参数的一个元素,second指向的是不大于第三个参数的一个元素。

可以理解为:在第一个迭代器与第二个迭代器之间找第三个元素的值。

移除map中的某个条目使用erase(),它有一个函数形式如下

size_type erase(const Key&key);//通过关键字删除

若使用clear()函数删除,那么相当于erase函数的另一个形式的使用:erase(map.begin(),map.end());//范围删除

map的swap函数,不是一个容器中的元素交换,而是两个容器所有元素的交换。

STL中的排序默认是使用小于号排序的,map本身是有序的,按照key从小到大进行排序,如果key是结构体的话,这时候的排序问题,可以通过两种方式解决,一种是重载小于号,另一种可以使用仿函数。

猜你喜欢

转载自www.cnblogs.com/Dark-King/p/10093221.html