建立两个map,第一个map通过pair和set来建立三个关系并且自动排序(set默认是升序排序,将评分改为负的,以便后续输出),第二个map建立为了第一个map的数据修改。将所有数据输入map中,在对评分修改时,访问第二个map找出对应的国家和评分,对第二个map评分进行修改并在第一个map内修改。通过
begin()找到第一个最小的值并输出其对应的食物。
class FoodRatings {
public:
map<string,set<pair<int,string>>> mp;
//建立map来存放所有数据并对其通过set排序
map<string,pair<int,string> >mp1;
//建立第二个map以便寻找对应国家来修改数据
public:
FoodRatings(vector<string>& foods, vector<string>& cuisines, vector<int>& ratings) {
int leng=foods.size();
//由于set自动排序为升序,所以将评分改为负的,以便输出
for(int i=0;i<leng;i++){
mp1[foods[i]]=make_pair(-ratings[i],cuisines[i]);
//将数据存入以食物为key的map中
mp[cuisines[i]].emplace(make_pair(-ratings[i],foods[i]));
//将数据存入以国家为key的map中
}
}
void changeRating(string food, int newRating) {
string t=mp1[food].second;
//找到食物对应的国家
int g=mp1[food].first;
//找到食物之前对应的评分
mp1[food].first=-newRating;
//将食物对应的评分进行修改
mp[t].erase(make_pair(g,food));
//set不能进行修改,则将国家对应的评分和食物进行删除
mp[t].emplace(make_pair(-newRating,food));
//插入新修改的数据
}
string highestRated(string cuisine) {
return mp[cuisine].begin()->second;
//由于set自动排序,输出最小的评分的食物
}
};