ZOJ 3309 Search New Posts(stl map)

用的stl的map,排序主要靠key.

#include <iostream>
#include <cstdio>
#include <memory.h>
#include <map>
#include <string>
using namespace std;

map<string,int>sToNum;
struct state
{
	string name;
	int v;
	bool operator<(const state &rhs)const{
		return v>rhs.v||(v==rhs.v&&name<rhs.name);
	}
};
map<state,int>list;
int opn;
char buf1[20],buf2[80];
int main(){
	while (scanf("%d",&opn)==1){
		sToNum.clear();
		list.clear();
		int maxv=1,id=1;
		while (opn--){
			scanf("%s",buf1);
			if(!strcmp(buf1,"new")){
				scanf("%s",buf2);
				sToNum[string(buf2)]=maxv++;
				state t;
				t.name=buf2;
				t.v=maxv-1;
				list[t]=1;
			}else if(!strcmp(buf1,"reply")){
				scanf("%s",buf2);
				state t;
				t.v=sToNum[buf2];
				t.name=buf2;
				map<state,int>::iterator it=list.find(t);
				t=it->first;
				list.erase(it);
				t.v=maxv++;
				sToNum[buf2]=t.v;
				list[t]=1;
			}else if(!strcmp(buf1,"tag")){
				scanf("%s",buf2);
				state t;
				t.v=sToNum[buf2];
				t.name=buf2;
				map<state,int>::iterator it=list.find(t);
				t=it->first;
				list.erase(it);
				t.v=0;
				sToNum[buf2]=0;
				list[t]=1;
			}else{
				map<state,int>::iterator it=list.begin();
				for (int i=0;i<100&&it!=list.end()&&it->first.v;++i,++it){
					printf("%s\n",it->first.name.c_str());
				}
				printf("###\n");
			}
		}
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值