map&pair

一、?

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的键值对来插入。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值