首页 > 学院 > 开发设计 > 正文

poj3481(通过stl中的set,以及pair和make_pair简单通过)

2019-11-06 07:12:41
字体:
来源:转载
供稿:网友
/*其实此题就是一个对应关系的题,如果用优先队列需要300多行的代码而且难以理解*/#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <set>using namespace std;int main(){    set < pair <int , int> >s;    set < pair <int , int> >::iterator it;//迭代器有点像for循环是个指针操作用于遍历容器中的元素等    int n,k,p;    while(scanf("%d", &n) != EOF && n){        if(n == 1){            scanf("%d%d", &k,&p);            s.insert(make_pair(p, k));//make_pair可以自动生成想要的pair类型方便            continue;//n==1的时候不用输出        }        if(n == 2){            if(s.empty()) {cout << "0" << endl;continue;}            it = s.end();            it--;//这里it--的原因是s.end()位置为越界的位置是最后一个值+1的位置,每次一旦输出优先级最高的那么就需要把这个释放所以要it--        }        if(n == 3){            if(s.empty()) {cout << "0" << endl;continue;}            it = s.begin();            //it++;这里s.begin()为第一个值的位置所以不用it++        }        if(!s.empty()) cout << (*it).second<< endl;        s.erase(it);//这是删除容器中的刚刚输出的元素    }    return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表