map的逆向删除
#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
int n;
map<int,char> asd;
typedef map<int,char>::iterator prefix;
typedef map<int,char>::reverse_iterator rever;
void delete_()
{
int num;
scanf("%d",&num);
for(rever iter=asd.rbegin();iter!=asd.rend();)
{
if(num==0)
break;
asd.erase((iter++).base());
num--;
}
}
void push(int i)
{
char data;
cin>>data;
asd.insert(pair<int,char>(i,data));
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
char flag;
cin>>flag;
if(flag=='T')
push(i);
else if(flag=='U')
delete_();
}
for(prefix itr=asd.begin();itr!=asd.end();itr++)
cout<<itr->second<<endl;
return 0;
}
核心代码
asd.erase((iter++).base());
asd.erase((iter++).base());
asd.erase((iter++).base());
asd.erase((iter++).base());
asd.erase((iter++).base());
asd.erase((iter++).base());