概述
7-45 航空公司VIP客户查询
首先看下map的一些基本操作函数功能
map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
个人感觉做算法题时常用的是
1.字符串到整型的应用
2.字符串到字符串的应用
7-45 航空公司VIP客户查询 (25 分)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务。现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分的功能。
输入格式:
输入首先给出两个正整数N(≤105)和K(≤500)。其中K是最低里程,即为照顾乘坐短程航班的会员,航空公司还会将航程低于K公里的航班也按K公里累积。随后N行,每行给出一条飞行记录。飞行记录的输入格式为:18位身份证号码(空格)飞行里程。其中身份证号码由17位数字加最后一位校验码组成,校验码的取值范围为0~9和x共11个符号;飞行里程单位为公里,是(0, 15 000]区间内的整数。然后给出一个正整数M(≤105),随后给出M行查询人的身份证号码。
输出格式:
对每个查询人,给出其当前的里程累积值。如果该人不是会员,则输出No Info。每个查询结果占一行。
输入样例:
4 500
330106199010080419 499
110108198403100012 15000
120104195510156021 800
330106199010080419 1
4
120104195510156021
110108198403100012
330106199010080419
33010619901008041x
输出样例:
800
15000
1000
No Info
代码实现
使用map进行的操作,有的地方不严谨,利用了创建一个字符串映射到对应的int映射值如没有则默认为0的默认值。
#include<stdio.h>
#include<algorithm>
#include<string.h> //没用上
#include<map>
#include<string>
#include<iostream>
using namespace std;
map<string,int>mp;
struct bijiao{
char cmp[20];
}b[100002];//存储后面输入的比较使用的身份证号
int main(){
int N=0,k=0,m=0,tempkm=0;
scanf("%d %d",&N,&k);
for(int i=0;i<N;i++){
int temp;
string temp1;
cin>>temp1;
scanf("%d",&temp);
if(temp<k) temp=k;//不足k的路程给补为k
mp[temp1]+=temp;//较为不严谨
}
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%s",&b[i].cmp); //将比较身份证号存入字符串
}
for(int i=0;i<m;i++){
string temp;
temp=b[i].cmp;
map<string,int>::iterator it=mp.find(temp);//查找是否存在对应键值,若不存在则会返回end()迭代器
tempkm=it->second;//取出对应映射值;
if(mp.find(temp)==mp.end()) printf("No Infon");
else printf("%dn",tempkm);
}
return 0;
}
最后
以上就是瘦瘦万宝路为你收集整理的C++学习笔记:map的使用样例7-45 航空公司VIP客户查询的全部内容,希望文章能够帮你解决C++学习笔记:map的使用样例7-45 航空公司VIP客户查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复