标签:string std color 操作 ret int 显示 就是 first
题意:模拟图书馆图书的借用状态。书有三种状态:1在图书馆的书架上,2被接走了,3刚还回来还没有放到书架上。每次有三种操作:1借书,2还书,3把换回来的书放回书架。
思路:思路简单,主要就是map,set的运用比较复杂,还是折腾了挺久
#include<bits/stdc++.h> struct Book { string aut,tit; bool operator < (const struct Book& b)const{ return aut<b.aut || (aut==b.aut && tit<b.tit); } }book; set<Book> ret,lib; string s,tit; map<string,string> mp; int main(void) { while(getline(cin,s)&&(s!="END")) { int i=s.find(‘"‘,1); book.tit=s.substr(0,i+1); book.aut=s.substr(i+5); mp[book.tit]=book.aut; lib.insert(book); } while(getline(cin,s)) { if(s[0]==‘E‘) break; if(s[0]==‘S‘) // 显示操作 { set<Book>::iterator it,it1; for(it=ret.begin();it!=ret.end();it++) { cout<<"Put "<<it->tit<<" "; it1=lib.lower_bound(*it); if(lib.empty()||it==lib.begin()) cout<<"first"<<endl; else cout<<"after "<<(--it1)->tit<<endl; lib.insert(*it); } ret.clear(); cout<<"END"<<endl; } else // 借还操作 { int i=s.find(‘"‘); string booktit=s.substr(i); book.tit=booktit; book.aut=mp[booktit]; if(s[0]==‘B‘) lib.erase(book); else ret.insert(book); } } return 0; }
标签:string std color 操作 ret int 显示 就是 first
原文地址:https://www.cnblogs.com/jaszzz/p/13054056.html