力扣 2353. 设计食物评分系统 (https://leetcode.cn/problems/design-a-food-rating-system)

建立两个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自动排序,输出最小的评分的食物

    }



};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值