map简介及练习题目

一、map简介

map是C++的一个标准容器,提供一个key到value的映射,其中key可以为字符串、数字、字符等,例如int数组也是一个映射,但是只能是int到int的映射。map有一些常用的函数如下:

构造函数:
map<Type,Type> myMap; //Type可为string、int、char等

普通函数:
myMap.insert(pair<Type,Type>(key,value));
myMap.count(key);//返回值为0、1对应无、有此元素
myMap.find(key); //返回值为迭代器,若没有此元素返回myMap.end();
myMap.erase(key);

迭代器:
map<Type,Type >::iterator myIterator;

注意事项:

myMap.begin()是容器的第0个元素,myMap.end()是容器最后一个元素的下一个元素。

序列性容器::(vector和list和deque)
erase迭代器不仅使所指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器。

关联性容器::(map和set)
erase迭代器只是被删元素的迭代器失效,但是返回值为void,所以要采用erase(iter++)的方式删除迭代器,

二、练习题目-木材仓库

题目描述

博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是相同的。作为仓库负责人,你有时候会进货,有时候会出货,因此需要维护这个库存。有不超过 100000 条的操作:
进货,格式 1 Length:在仓库中放入一根长度为 Length(不超过10^9) 的木材。如果已经有相同长度的木材那么输出Already Exist。
出货,格式 2 Length:从仓库中取出长度为 Length 的木材。如果没有刚好长度的木材,取出仓库中存在的和要求长度最接近的木材。如果有多根木材符合要求,取出比较短的一根。输出取出的木材长度。如果仓库是空的,输出Empty。

输入格式

输出格式

输入输出样例
输入
7
1 1
1 5
1 3
2 3
2 3
2 3
2 3

输出
3
1
5
Empty

解题过程

有10000次操作且Length长度为1e9,选择map解此题较为合适,map能对key自行按升序排序。
要注意vec.begin()是容器的第0个元素,vec.end()是容器最后一个元素的下一个元素,这一步判断这个点是不是最后一个点,应该把这个点的迭代器加1再与end()做比较,而判断这个点是不是第一个点却不用先减一而是直接把这个点与begin()做比较。

if(itLat == store.end()) {
     //!!!
	cout << (--it)->first << endl
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asdfghtyjukilo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值