一、?
map
理解起来有些晦涩,映射这个东西到底使用来做什么的没有看明白,先往下看着
但是使用条件,声明头文件#include<map> 添加using namespace std;
二、定义
单独定义一个map:
map<typename1,typename2> name;
typename1是代表的key类型,typename2是代表的value类型。如果是字符串映射到int型,只能用string 而不能用char
因为char数组作为数组不能被作为键值。例如:map<string,int>name;
当键和值作为数组的时候:map<set<int>,string >name;
三、元素访问
一:下标访问:
注意:map中的键是唯一的
所以当同一个key值对应不同的value值时,前面的将会被覆盖
#include<cstdio>
#include<string>
#include<map>
#include<iostream>
using namespace std;
int main(){
map<char,int> name;
name['c'] = 10;
name['c'] = 20;
cout<<name['c']<<endl;
return 0;
}
输出:
20
二:通过迭代器
map<typename1,typename2>::iterator vi;
因为map同时有key和value值所以vi可以同时访问两个值。通常使用vi->first来访问key,vi->second来访问value
#include<cstdio>
#include<string>
#include<map>
#include<iostream>
using namespace std;
int main(){
map<char,int> name;//key值唯一
name['c'] = 10;
name['c'] = 20;
name['b'] = 20;
map<char,int>::iterator vi;
vi = name.begin();
for(vi;vi!=name.end();vi++){
cout<<vi->first<<vi->second<<endl;
}
cout<<name['c']<<endl;
return 0;
}
输出:
b20
c20
20
由于map和set一样,内部是用红黑树实现的,map在建立映射的时候是根据key的值按从小到大的顺序排列的。
四、常见函数
find(); 根据key值来实现的
erase();同样的两种用法
1、删除单个元素:name.erase('key'); name.erase(it); it为元素的迭代器。
2、删除区间元素:name.erase(first,last) .同样的左闭右开
szie();获取映射中有对数的数量
clear();
map的常见用途
1、建立字符/字符串与整数之间映射的题目。减少代码量
2、判断大整数与其他类型的数值是否存在,可以把map当做bool数组使用。
3、字符串和字符串的映射也可能会用到。
pair
可以把pair看做一个内部有两个可以指定类型的元素的结构体。
定义:
添加头文件#include<utility> ,头文件下加上using namespace std;因为实现map的时候会自动涉及pair,所以添加map头文件的时候会自动涉及utility头文件,添加map头文件就可以代替utility。
#include<cstdio>
#include<utility>
#include<iostream>
using namespace std;
int main(){
pair<int,string> vi(123,"asd") ;
cout<<"当前的元素分别是"<<vi.first<<" "+vi.second<<endl;
vi = pair<int,string>(22,"new");//在这里特别注意下,如果pair临时构建pair,其数据类型要一一对应,不然会报错
cout<<"临时定义方法一的元素分别是"<<vi.first<<" "+vi.second<<endl;//输出:22 new
vi = make_pair('a',"asd"); 如果用make_pair临时构建pair,其数据类型int .double.float.char型会自动进行转化
//例如这里int对应的是字符型,输出的时候自动转换成ASCII码值
cout<<"临时定义方法二的元素分别是"<<vi.first<<" "+vi.second<<endl;//输出:97 asd
return 0;
}
常用函数
两个pair函数之间进行大小比较,其先是以first进行比较,若first相等,那么比较second的大小。
常见用途
用来代替二元结构及其构造函数,
作为map的键值对来插入。