STL模板中對map的小見解

今天在做map模板題目的時候,對題目的運行過程發生興趣,於是調試一番,最終清楚了其運行機制,題目如下:

Description

小明經營着一個不大的水果店.現在他想要一份水果銷售情況的明細表,這樣就可以很容易掌握所有水果的銷售情況了.

Input

輸入包含多組數據.每組測試數據的第一行是一個整數M(0<M<=100),表示有M次成功的交易.其後有M行數據,每行表示一次交易,由水果名稱(長度不超過80)和交易的水果數目(正整數,不超過100)組成.

Output

對於每一組測試數據,請你輸出一份排版格式正確(請分析樣本輸出)的水果銷售情況明細表.這份明細表包括所有水果的名稱和其銷售總數的信息.按照水果名稱排序。格式見樣例!

 

Sample Input

3
apple 3
sugarcane 1
pineapple 3

Sample Output

apple:3
pineapple:3
sugarcane:1

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章