HJ94

 

 

提交了十几次,终于通过了! -_-

受到机考题的影响,在想着按照value值排序输出,结果是按照输入的顺序输出;就开一个vector存储输入的name。

迭代器是一个指针,要得到它代表的值需要解引用*iterator;调用成员行为或者属性要用->

first和second是成员属性,后面没有括号。而对象调用成员需要使用.运算符。

也学到了对map按照value排序的方法。就是:

先把pair作为一种数据类型,开辟一个pair类型的vector,对这个vector使用sort函数,

sort的第三个参数写一个比较函数来确定升/降序。

 

 

#include<iostream>
using namespace std;
#include<string>
#include<map>
#include<vector>
#include<algorithm>

typedef pair<string, int> PAIR;
int cmp (PAIR &x, PAIR &y)
{
    return x.second > y.second;
}
//按照输入的顺序……
int main()
{
    int n = 0;
    string name;
    string vote;
    
    
    while(cin >> n)
    {
        map<string, int> candidates;
        vector<string> outSquence;
        int nVoters = 0;
        int invalid = 0;
        while(n--)
        {
            cin >> name;//专门用一个向量来存储输入的顺序,后面遍历向量元素,在map中找到对应的value
            candidates[name] = 0;
            outSquence.push_back(name);
        }//创建好了候选人-得票数 表;创建好了输入顺序向量
        cin >> nVoters;
        while(nVoters--)
        {
            cin >> vote;
            if(candidates.find(vote) == candidates.end())
            {
                invalid ++;
            }
            else
            {
                candidates[vote] ++;
            }
            
        }//得到候选人的得票数和无效投票数
        for(int i=0;i<outSquence.size();i++)
        {
            cout << outSquence[i] << " : " << candidates[outSquence[i]] << endl;
        }
        cout << "Invalid : " << invalid << endl;
        candidates.clear();
        outSquence.clear();
        
        
        /*
        //做一个PAIR类型的向量
        vector<PAIR> vec(candidates.begin(), candidates.end());
        //对向量排序
        sort(vec.begin(),vec.end(),cmp);
        //打印输出
        for(int i=0;i<vec.size();i++)
        {
            cout << vec[i].first << " : " << vec[i].second << endl;
        }
        cout << "Invalid : " << invalid << endl;
        candidates.clear();
        vec.clear();
        /*    //明确几个问题:it是一个指针,it->first;而first和second是成员,所以没有括号;对象用的是.运算符:vec[i].first
        for(auto it = vec.begin();it != vec.end(); it++)
        {
            cout << it->first << 
        }
        */
        
        
    }
    
    
    return 0;
}

  

上一篇:Leetcode 40. Combination Sum(组合总和 II)


下一篇:回溯:组合问题