POJ 1886 Borrowers G++ 字符串处理巧妙 upper_bound使用 没掌握

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
#include <map>
#include <string> 
using namespace std;
//英语     抄博友程序       字符串处理巧妙       upper_bound使用      没掌握
struct book{
	string title;
	string author;
};
bool operator<(const book& a, const book& b)//抄博友程序    没掌握     作者排名优先 
{
	if(a.author==b.author)
	{
		return a.title>b.title;//抄博友程序   与upper_bound和set联用    没掌握 
	}else
	{
		return a.author>b.author;
	}
}
set<book> lib;
set<book> desk;
map<string,book> mp; 
int main()
{
	//freopen("1886.txt","r",stdin); 
	string s;
	while(getline(cin,s),s!="END")//抄博友程序 
	{
		//cout<<s<<endl;
		int pos=s.find(" by ");//抄博友程序
		string title=s.substr(0,pos);//抄博友程序
		string author=s.substr(pos+4);
		book shu;
		shu.title=title;
		shu.author=author;
		mp[title]=shu;
		lib.insert(shu); 
	}
	while(getline(cin,s),s!="END")
	{
		if(s.substr(0,6)=="BORROW")//抄博友程序 
		{
			//cout<<"hi0"<<endl;
			string title=s.substr(7);//抄博友程序 
			lib.erase(mp[title]);
		}else if(s.substr(0,6)=="RETURN")
		{
			//cout<<"hi1"<<endl;			
			string title=s.substr(7);
			desk.insert(mp[title]);//抄博友程序 
		}else
		{
			//cout<<"hi2"<<endl;			
			for(set<book>:: reverse_iterator it=desk.rbegin();it!=desk.rend();it++)
			{
				cout<<"Put "<<it->title;
				if(lib.upper_bound(*it)==lib.end())//没掌握 
				{
					cout<<" first"<<endl;
				}else
				{
					cout<<" after "<<lib.upper_bound(*it)->title<<endl; 
				}
				lib.insert(*it);//抄博友程序 
			} 
			cout<<"END"<<endl;//抄博友程序 
			desk.clear();//抄博友程序 
		}
	}	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值