这题题目其实比较简单,大概意思就是给一些单词和页数给你,要你统计这些单词和它们的最小页数,典型的“key-value”结构,很容易可以想到用
map<string,int>
但问题在于这个map容器对string的对比不是很友好(目前尚不知道什么原理,希望评论区的大佬能指点指点),对于相同的string仍会插入。所以只能借助结构或类,自己重载运算符的方式进行比较了,这里我选择用结构。
struct English{
string str;
bool operator<(const English str1)const
{
return this->str<str1.str;
}
};
这样我们就可以用map容器很方便的将所有给出单词及它们的最小页数统计起来,然后再根据要复习的单词将页数统计起来,由于页数有重复这里选择用一个set容器来统计(set容器里不会有重复数据),最后直接统计set容器的长度就是我们要得到的复习的页数。这道题到这里基本就完成了(最麻烦的其实还是处理输入(-_-))。上代码
#include<iostream>
#include<cstring>
#include<map>
#include<set>
using namespace std;
struct English{
string str;
bool operator<(const English& str1)const
{
return this->str<str1.str;
}
};
int main()
{
set<int> pages;
map<English,int> word;
int n; //给出单词数量
cin>>n;
for (int i=0;i<n;i++)
{
getchar();
English W;
getline(cin,W.str,' ');
int n;
cin>>n;
if(word.count(W)&&n<word[W])
word[W]=n;
else
word.insert(pair<English,int>(W,n));
}
int m; //要背单词数量
cin>>m;
getchar();
for (int i=0;i<m;i++)
{
English W;
getline(cin,W.str,'\n');
if(word.count(W)==1)
pages.insert(word[W]);
}
cout<<pages.size();
return 0;
}