1.水果分类
李老板很有智慧,在春天的时候去摆摊卖应季水果,例如荔枝,菠萝,桃子啥的。
但李老板是个电脑白痴,他用收银机总是找不到客人买的水果。
所以要求你帮他进行水果分类。
给你 N 种水果,每个水果都有一个名字和一个类别,都是字符串且长度不超过 20。
输入
输入只有一组。
第一行是 n。 (1 ≤ n ≤ 100)
接下来 n 行。
每行输出两个字符串,以空格相隔,分别表示 名字 和 类别。
(1 ≤ |all_string| ≤ 20)
输出
输出参照样例。
类别 和 名字 均按照字典序排序输出。
格式为 三个空格 + “|---” + 一个空格 + 字符串。
样例输入
7 apple red pineapple yellow banana yellow leechee red peach yellow watermelon yellow yangtao green
样例输出
green |--- yangtao red |--- apple |--- leechee yellow |--- banana |--- peach |--- pineapple |--- watermelon
总结:
#include<iostream>
#include<map>
#include<set>
using namespace std;
//map容器函数中嵌套一个set容器函数,因为在map中一个键值对应一个权值,但是题目输出的是一个
//对多个的关系,所以需要用set进行存储多个的操作
map<string,set<string> >mp;
int main(int argc, char const *argv[]) {
string aname,bzhonglei;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>aname>>bzhonglei;
mp[bzhonglei].insert(aname);
}
//迭代器的定义
for(map<string,set<string> >::iterator it =mp.begin();it!=mp.end();it++ ){
//给set在定义一个迭代器
set<string>::iterator s_it;
cout<<it->first<<endl;
//让s_it指向it第二个也就是set容器的开始,然后开始进行遍历
for(s_it=(it->second).begin();s_it!=(it->second).end();s_it++){
cout<<" |--- "<<*s_it<<endl;
}
}
return 0;
}
2,消息队列
题目描述
我们都知道,计算机储存消息是按照优先级输出的。
我们定义以下规则:
1. 每个消息,都有两个属性,分别是数据和优先级。
2. 存在一个空间,可以储存已有的消息。
3. 当遇到一个 “PUSH” 指令,后面会跟着 一个数据(字符串), 和一个优先级(整数,越大越优先)。
4. 当遇到一个 “POP” 指令,若空间中有信息,则输出该信息的数据,否则输出"NULL!"。
5. 如果两个消息,优先级一样,则越早输入的数据越优先。
详情参照样例。
输入
输入只有一组测试数据,行数未知,保证不超过 50000 行。
每一行一个命令。
1. "PUSH Str N" 表示需要向空间添加进一个 优先级为 N, 数据为 Str 的消息,不需要输出。
2. "POP" 表示需要输出空间中的一条消息的数据,若为空则输出"NULL!"。
(0 < |Str| < 101, 0 < N < 1001)
输出
按照每一条指令的要求输出。
PUSH 指令不需要有任何输出
样例输入
POP PUSH First 2 POP PUSH Second 2 PUSH THIRD 100 PUSH FOURTH 2 POP POP POP POP PUSH asddf 103 POP
样例输出
NULL! First THIRD Second FOURTH NULL! asddf
总结:利用优先队列来求解
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
string op,data;
int vip;
//本题需要创建一个结构体,然后进行存储
struct node{
string data;
int vip;
}temp;
bool operator < (node a,node b){
if(a.vip<b.vip){
return true;
}
else
return false;
}
int main(int argc, char const *argv[]) {
//优先队列也可以是由struct类型的,但是需要进行运算符重载,因为结构体中有多个不同类型
//的数据,所以需要进行重载
priority_queue<node>q;
while(cin>>op){
if(op=="PUSH"){
cin>>data>>vip;
temp.data=data;
temp.vip=vip;
q.push(temp);
}
else{
if(q.empty()) cout<<"NULL!"<<endl;
else{
temp=q.top();
cout<<temp.data<<endl;
q.pop();
}
}
}
return 0;
}
再接再厉吧!!!!!!