map

 

1、头文件 #include <map>

2、有关定义

定义实例: map<int,int> name;定义 map<int,vector<int> > name;时,放入键值对的操作应该是,name[i].push_back(),因为name[i]指向的对象是vector类型的

定义迭代器:map<int,int> : : iterator it

3、元素计数:name.count(关键字),返回值为0或1。表明name中是否存在该关键字的键值对。

4、访问元素:

1.访问键的名称来获得值:value = name[关键字] ; 若不存在该关键字的键值对,不会报错,会插入一个值为空的键值对;

2.使用at来访问 value = name.at(关键字);若不存在该关键字的键值对,则会报错;

3.使用函数find(关键字):此时返回的是迭代器,用起来略复杂,看栗子:

std::map<char,int> mymap;
std::map<char,int>::iterator it;

mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;

it = mymap.find('b'); //迭代器
if (it != mymap.end())//若该键的不存在,it返回.end()
    mymap.erase (it); // b被成功删除,顺便讲了怎样删除

5、应用:

前缀和+map,解决一类区间问题,用map的find 方法比循环查找快,时间复杂度为log(N)

		map<long long,vector<int> > k;
		map<long long,vector<int> > ::iterator it;
		int count=0;
		long long num[100001];
		vector<int> tt;
		sum=0;
		num[0]=0;
		k[0].push_back(0);
		for(i=0; i<n; i++) {
			scanf("%d",&a);
			sum+=a;//每次读入,记录当前点的位置以及他之前的从开头开始的区间之和,用map标记
			num[i+1]=sum;
			k[sum].push_back(i+1);
		}

6、清空操作

mymap.erase(mymap.begin(),mymap.end());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值