提交了十几次,终于通过了! -_-
受到机考题的影响,在想着按照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; }