今天在做map模板題目的時候,對題目的運行過程發生興趣,於是調試一番,最終清楚了其運行機制,題目如下:
Description
小明經營着一個不大的水果店.現在他想要一份水果銷售情況的明細表,這樣就可以很容易掌握所有水果的銷售情況了.
Input
輸入包含多組數據.每組測試數據的第一行是一個整數M(0<M<=100),表示有M次成功的交易.其後有M行數據,每行表示一次交易,由水果名稱(長度不超過80)和交易的水果數目(正整數,不超過100)組成.
Output
對於每一組測試數據,請你輸出一份排版格式正確(請分析樣本輸出)的水果銷售情況明細表.這份明細表包括所有水果的名稱和其銷售總數的信息.按照水果名稱排序。格式見樣例!
Sample Input
Sample Output
HINT
用STL的map容易實現
該題目較爲簡單,且該程序可直接用自動排序實現。但在一個地方值得注意:測試數據不僅僅是對應那麼簡單,當有重複的string值出現時,其映射需要累加。代碼如下:
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
map<string,int>a;
for(int i = 0; i < n; i++)
{
int flag = 1;
string str;
int num;
cin>>str>>num;
map<string,int>::iterator it;
for(it = a.begin(); it != a.end(); it++)
{
// cout<<it->first<<endl; //測試每次循環的第一個string類是什麼
if(str == it -> first)
{
it -> second += num; //累加每個string對應的int類
flag = 0; //保證不會被二次賦值
break;
}
}
if(flag) //如果string類在之前沒有被鍵入過,則鍵入該字符串
a.insert(make_pair(str,num));
}
map<string,int>::iterator it;
for(it = a.begin(); it != a.end(); it++)
{
cout<<it->first<<":"<<it->second<<endl;
}
}
return 0;
}