题解 | #记票统计#
记票统计
https://www.nowcoder.com/practice/3350d379a5d44054b219de7af6708894
#include <iostream> #include <string> #include <vector> #include <unordered_map> using namespace std; //要记录每个候选人的名字(字符串)+得票数,用map来记录。如果传入的key不存在,则int invali++;不要对输入的内容排序,用unordered_map。但unordered_map自己也无法保证原有的输入顺序不变,所以输出的时候,要和存放姓名的数组一起配合输出。vector中的数据顺序是不会改变的 int main() { int n1=0,n2=0,i=0;//n1为候选人数,n2为投票人数 int invali=0;//记录不合法票数 string tmp;//记录每个输入 vector<string> s1;//s1为选手的名字,s2为候选人写的名字 unordered_map<string,int>m; cin>>n1; for(i=0;i<n1;i++){ cin>>tmp; m.insert(pair<string,int>(tmp,0)); s1.push_back(tmp); } cin>>n2; for(i=0;i<n2;i++){ cin>>tmp; if(m.find(tmp)!=m.end()){m[tmp]++;} else{ invali++; } } for(i=0;i<s1.size();i++){ cout<<s1[i]<<" : "<<m[s1[i]] <<endl;//用vector的容器存放姓名,是为了保证每个元素都是string类型 //如果用string容器,这里s1[i]就相当于char类型,但我们的map定义的是<string,int>,就找不到对应的key了 } cout<<"Invalid : "<<invali<<endl; }