水果

http://acm.hdu.edu.cn/showproblem.php?pid=1263

Problem Description

夏天来了~~好开心啊,呵呵,好多好多水果~~Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.

Input

第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.

Output

对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.两组测试数据之间有一个空行.最后一组测试数据之后没有空行.

Sample Input


apple shandong
pineapple guangdong
sugarcane guangdong
pineapple guangdong
pineapple guangdong

Sample Output

guangdong
|----pineapple()
|----sugarcane()
shandong
|----apple()

map的嵌套

 #include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
#include <map> using namespace std; int main()
{
//freopen("sample.txt","r",stdin);
int n;
cin>>n;
for(int i=;i<n;i++)
{
if(i!=)
cout<<endl;
int m;
cin>>m;
map<string,map<string,int> > mp;
map<string,map<string,int> >::iterator it1;
map<string,int>::iterator it2;
while(m--)
{
string fruit,address;
int count;
cin>>fruit>>address>>count;
mp[address][fruit]+=count; //这一步要记住
}
for(it1=mp.begin();it1!=mp.end();it1++)
{
cout<<it1->first<<endl;
for(it2=it1->second.begin();it2!=it1->second.end();it2++)
{
cout<<" |----"<<it2->first<<"("<<it2->second<<")"<<endl;
}
}
}
return ;
}
别人用了struct间接实现map的嵌套
 #include<iostream>
#include<string>
#include<map>
using namespace std; struct MyStruct
{
map <string, int>MyStructma; //存放水果名以及该种水果的数量
};
int main()
{
map <string, MyStruct>ma; //地名
map <string, MyStruct>::iterator it;
map <string, int>::iterator MyStructmait;
string fruit,place;
int count;
int n,t;
cin>>t;
while(t--)
{
ma.clear();
cin>>n;
while(n--)
{
cin>>fruit>>place>>count;
ma[place].MyStructma[fruit] += count;
}
for (it = ma.begin(); it != ma.end(); it++)
{
cout<<it->first<<endl;
for (MyStructmait = it->second.MyStructma.begin(); MyStructmait != it->second.MyStructma.end(); MyStructmait++)
{ cout<<" |----"<<MyStructmait->first<<"("<<MyStructmait->second<<")"<<endl;
}
}
if(t != )cout<<endl;
}
return ;
}

也可以结构体排序,不用STL

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; struct Node
{
char name[];
char space[];
int num;
} f[]; int cmp(Node x,Node y)
{
if(strcmp(x.space,y.space))
return strcmp(x.space,y.space)<;
return strcmp(x.name,y.name)<;
} int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%*c",&n);
for(i = ; i<n; i++)
{
scanf("%s%s%d",f[i].name,f[i].space,&f[i].num);
}
sort(f,f+n,cmp);
char di[],min[];
int cnt = ,flag = ;
strcpy(di,f[].space);
strcpy(min,f[].name);
for(i = ; i<n; i++)
{
if(strcmp(di,f[i].space))
{
strcpy(di,f[i].space);
strcpy(min,f[i].name);
flag = ;
cnt = ;
}
if(!strcmp(di,f[i].space))
{
if(flag)
{
printf("%s\n",di);
flag = ;
}
if(!strcmp(min,f[i].name))
{
while(!strcmp(min,f[i].name) && !strcmp(di,f[i].space))//产地与水果名都必须相同
{
cnt+=f[i].num;
i++;
}
printf(" |----%s(%d)\n",min,cnt);
strcpy(min,f[i].name);
i--;
cnt = ;
}
}
}
if(t)
printf("\n");
} return ;
}

另一种解法

 #include<cstdio>
#include<iostream>
#include<map>
#include<string>
using namespace std; int main(){
int n,m;
string color;
map<string,int>mp;
while(scanf("%d",&m)!=EOF && m){
while(m--){
cin>>color;
mp[color]++;
}
int max = ;
string a;
for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++){
if(max<=it->second){
max = it->second;
a = it->first;
}
}
cout<<a<<endl;
mp.clear();
}
return ;
}

STL中map的嵌套使用

from:https://www.cnblogs.com/1114250779boke/archive/2012/08/07/2626477.html

 
最近开发中要用到STL,然后自己查看了一些资料,并写了一些代码。在使用<map>中,想起了如果是map嵌套,该如何应用呢?下面是我的coding内容:

对于传统的map:

 #include <iostream>
#include <map> using namespace std; int main()
{
map<int, string> scores; scores.insert(make_pair(,"maxi")); scores[]="MAXI"; scores.insert(make_pair(,"xiaoyu")); scores.insert(make_pair(,"xiao")); scores[]="xiaoma"; map<int,string>::iterator pScores; for(pScores=scores.begin();pScores!=scores.end();pScores++)
{
std::cout<<pScores->first<<" "<<pScores->second<<endl;
}
return ;
}

结果输出:

    

由此可以看出,scores[100]="MAXI"会直接替换掉原来100map对应的value,而如果调用scores.insert()函数,则由于本map是单映射的,300 map的value:xiao就不会替换掉原来300 map对应的value:xiaoyu

但如果我想定义嵌套的map并对它进行遍历,该如何进行呢:

 #include<iostream>
#include<map> using namespace std;
int main()
{
//对于这样的map嵌套定义,有两种插入方法:
//定义一个map<int, string>变量,对其定义后在插入multiMap
map<int,map<int,string> >multiMap; map<int, string> temp; temp.insert(make_pair(,"hi")); temp.insert(pair<int,string>(,"maxi")); //pair<int,string>()和make_pair()有相同作用 multiMap.insert(make_pair(, temp)); //将临时变量插入到multiMap中
//也可以直接赋值
multiMap[][]="xiaoyu"; multiMap[][]="xiaoma"; // 以下是如何遍历本multiMap
map<int,map<int,string> >::iterator multitr;
map<int,string>::iterator intertr;
for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)
{
for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)
std::cout<< multitr ->first<<" "<<intertr->first<<" ("<< intertr -> second <<")"<<endl;
}
return ;
}

运行结果如下:

      

总结,map的成员加入有两种赋值方法,一种是调用map.insert()函数,这样,由于是单映射,后面加入的新的pair对如果有key值和前面一样,那么后面的pair对元素将不会被加入到map中;但如果是直接[ ]=赋值操作的话,相当于数组赋值,会直接替换掉原来具有相同key域的pair对。


map的嵌套 + 例题(水果)的更多相关文章

  1. 水果(map的嵌套)

    夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了 ...

  2. Map的嵌套 练习

    Map的嵌套   练习 利用迭代和增强for循环的两种方式实现如下效果 package cn.ccc; import java.util.HashMap;import java.util.Iterat ...

  3. Map的嵌套,HDU(1263)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 新学的map的嵌套 #include <stdio.h> #include < ...

  4. 双列集合Map的嵌套遍历

    双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂.例如一个集合:HashMap<Integer,HashMap<String,Inte ...

  5. Map接口----Map中嵌套Map

    package cn.good.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impo ...

  6. Map的嵌套

    package cn.lijun.demo2; import java.util.HashMap; import java.util.Iterator; import java.util.Set; p ...

  7. Map的嵌套使用

    Map嵌套Map: 例: AAA: Javas班: 001 熊大 002 熊二 Hdoop班 001 小猪猪 002 小菲菲 ★使用增强for循环遍历Set数组: import java.util.H ...

  8. fastjson排序 Map多层嵌套转换自动排序问题终极解决方案

    阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...

  9. map练习小例题

    "fdgavcbsacdfs" 获取该字符串中,每一个字母出现的次数. 要求打印结果是:a(2)b(1)...; 思路: 对于结果的分析发现,字母和次数之间存在着映射关系.而且这种 ...

随机推荐

  1. 由于找不到msvcp100.dll无法继续执行代码

    最近重装系统之后安装mysql, 执行 mysqld install 命令时出现 : 由于找不到msvcp100.dll无法继续执行代码... 解决办法 下载 Microsoft Visual C++ ...

  2. [题解] Luogu P2000 拯救世界

    生成函数板子题...... 要写高精,还要NTT优化......异常dl 这个并不难想啊...... 一次召唤会涉及到\(10\)个因素,全部写出来,然后乘起来就得到了答案的生成函数,输出\(n\)次 ...

  3. 吴裕雄--天生自然 JAVASCRIPT开发学习:for 循环

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. git本地代码回滚

    git本地操作有时会有误删误改并提交的时候,此时可以通过回滚获得之前的特定版本 1. 查看log 输入  git log  查看commit记录 [xxxxxxx]$ git log 结果大致如下(根 ...

  6. [C/C++]'fopen': This function or variable may be unsafe

    这个错误也算比较常见吧,当然这个与代码无关,是编译器的问题,主要是VS中出现的,因为微软方面认为fopen函数是不安全的,于是自己搞了一套fopen_s的函数来代替,用前面一个的话编译器是会出错的,所 ...

  7. java课程之团队开发冲刺阶段1.8

    一.总结昨天进度 1.实现预装sqlite数据库,将数据库放在app的assets目录下,该目录在打包的时候不会压缩,所以数据库文件可以在安装之后继续使用,然后APP安装之后检测外部存储空间是否有这个 ...

  8. Java web实现综合查询+SQL语句拼接

    首先展示图形界: 界面比较简单,但麻雀虽小五脏俱全.因为数据库只有六种数据类型,所以最多添加六个查询框. 测试以下问题: 删除方式是从上往下开始的,如果删除之后会有问题.(后续改进ing) 若干个并且 ...

  9. String 字符串,heredoc,nowdoc

    一个字符串可以用 4 种方式表达: 单引号 双引号 heredoc 语法结构 nowdoc 语法结构(自 PHP 5.3.0 起) 单引号 定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ' ...

  10. WOJ 1543 Array

    还是聪哥给我讲的思路才知道的,起初我利用两两互质去求发现有问题,互质只是必要条件而非充分条件,后来还是用的标准思路 即其实最终只要保留最大的素数的幂即可,其他包含该素数幂但指数低的都不用了,这样就能保 ...