1.map简介
map是STL的一个关联容器,提供一对一的hash
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可以成为该关键字的值(value);
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。map主要用于资料一对一映射(one-to-one)的情况,map内部的实现自建一棵红黑树,这棵树有对数据自动排序的功能。在map内部所有的数据都是有序的。例如一个班级中,每个学生的学号和他的姓名就存在一对一的映射关系。
2.map的功能
自动建立key-value的对应。key和value可以是任意你需要的类型,包括自定义类型。
3.使用map
使用map首先要引入头文件
#include
4.map的构造函数
map共提供了六个构造函数,我们常用如下方法构造一个map:
map<int,string> mapStudent;
5.插入元素
//定义一个map对象
map<int,string> mapStudent;
//第一种插入方法,用insert函数 插入pair
mapStudent.insert(pair<int,string>(000,"student_zero"));
//第二种插入方法,用insert函数插入 value_type数据
mapStudent.insert(map<int,string>::value_type(001,"student_one"));
//第三种插入方法 用array插入
mapStudent[123]="student_first";
mapstudent[456]="student_second";
用insert插入数据时,当map中有这个关键字时,insert操作是不能再插入数据的,但是用数组则可以覆盖以前关键字对应的值。程序说明:
mapStudent.insert(map<int,string>::value_type(001,"student_one"));
mapStudent.insert(map<int,string>::value_type(001,"student_two"));
执行上面两句后,map中001关键字对应的值是”student_one“,第二条语句不生效
6.查找元素
当所查找的关键key出现时,返回数据所在对象的位置,如果没有,返回的iter与end函数的值相同。
//find返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mapStudent.find("123");
if(iter!=mapStudent.end())
cout<<"Find,the value is"<<iter->second<<endl;
else
cout<<DO NOT find<<endl;
7.删除与清空元素
//迭代器删除
iter=mapStudent.find("123");
mapStudent.erase(iter);
//用关键字删除
int n = mapStudent.erase("123");//删除了返回1否则返回0
//用迭代器范围删除
mapStudent.erase(mapStudent.begin(),mapStudent.end());
//等同于mapStudent。clear()
8.map的大小
获知插入了多少数据,用size函数
int nSize = mapStudent.size();
9.map基本操作函数
C++ maps是一种关联式容器,包含"关键字/值"对
begin() //返回指向map头部的迭代器
clear() //删除所有元素
count() //返回指定元素出现的次数
empty() //如果map为空返回true
end() // 返回指向map末尾的容器/最后一个元素的下一个位置
equal_range() //返回特殊条目的迭代器对
erase() // 删除一个元素
find() //查找一个元素
get_allocator() //返回map的配置器
insert() //插入元素
key_comp() //返回比较元素key的函数
lower_bound() //返回键值>=给定元素的第一个位置
max_size() //返回可以容纳的最大元素个数
rbegin() //返回一个指向map尾部的逆向迭代器
rend() //返回一个指向map头部的逆向迭代器
size() //返回map中元素的个数
swap() //交换两个map
upper_bound() //返回键值>给定元素的第一个位置
value_comp() //返回比较元素value的函数