HDU--1908Double Queue【STL--map】

23 篇文章 0 订阅

Double Queue

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 940    Accepted Submission(s): 456


Problem Description
The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest, equipped with a modern computing environment provided by IBM Romania, and using modern information technologies. As usual, each client of the bank is identified by a positive integer K and, upon arriving to the bank for some services, he or she receives a positive integer priority P. One of the inventions of the young managers of the bank shocked the software engineer of the serving system. They proposed to break the tradition by sometimes calling the serving desk with the lowest priority instead of that with the highest priority. Thus, the system will receive the following types of request:

Your task is to help the software engineer of the bank by writing a program to implement the requested serving policy.

 

Input
Each line of the input contains one of the possible requests; only the last line contains the stop-request (code 0). You may assume that when there is a request to include a new client in the list (code 1), there is no other request in the list of the same client or with the same priority. An identifier K is always less than 10 6, and a priority P is less than 10 7. The client may arrive for being served multiple times, and each time may obtain a different priority.

 

Output
For each request with code 2 or 3, the program has to print, in a separate line of the standard output, the identifier of the served client. If the request arrives when the waiting list is empty, then the program prints zero (0) to the output.

 

Sample Input
  
  
2 1 20 14 1 30 3 2 1 10 99 3 2 2 0
 

Sample Output
  
  
0 20 30 10 0
 

题目意思:

3个命令。代号分别为123

1:代表要创建一个账号,后面输入两组数字,分别代表客户的名字和客户的优先级别。

2:代表输出系统已经开设出来的帐户中优先级别最高的帐户的名字,输出后就销户,如果此时没有帐户,就输出0

3:代表输出系统已经开设出来的帐户中优先级别最低的帐户的名字,输出后就销户,如果此时没有帐户,就输出0

 

第一次用Map,查了好多资料,问了几个大神才初步了解了map。何为map

MapSTL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。map中默认采用小于号来排序的(从小到大排序),是对关键字进行排序。


#include <cstdio>
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;

int main (){
    int n;
    map<int,int>s;//关键字是前一个int型,关键字的值是后一个int型
    //map<int,int>iterator it 迭代器可以理解为指针
    while(scanf("%d",&n),n){
        int k,p;
        if(n==1){
            scanf("%d%d",&k,&p);//k为客户的名字,p为优先级
            s[p]=k; //p为关键字,k为关键字的值;
        }
        else if(n==2){
            if(s.empty())
                printf("0\n");
            else {
                printf("%d\n",s.rbegin()->second);//注意:[s.begin(), s.end())是左闭右开区间,所以取map中的最后的数据应该用s.rbegin()处理
                s.erase(s.rbegin()->first);//删除时用关键字删除,->first指向的是关键字,->指向的是关键字的值
            }
        }
        else if(n==3){
            if(s.empty()){
                printf("0\n");
            }
            else {
                printf("%d\n",s.begin()->second);
                s.erase(s.begin()->first);
            }
        }
    }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值