关于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是结构体的话,这时候的排序问题,可以通过两种方式解决,一种是重载小于号,另一种可以使用仿函数。