-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path353 Design a food rating system.cpp
54 lines (46 loc) · 1.55 KB
/
353 Design a food rating system.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <map>
#include <set>
#include <vector>
using namespace std;
class FoodRatings {
private:
map<string,pair<string,int>>foodrate;
map<string,map<int,set<string>>>cuisinerate;
public:
FoodRatings(const vector<string>&foods,const vector<string>&cuisines,const vector<int>&ratings) {
for(size_t i=0;i<foods.size();++i) {
const string&food=foods[i];
const string&cuisine=cuisines[i];
int rating=ratings[i];
foodrate[food]={cuisine,rating};
cuisinerate[cuisine][rating].insert(food);
}
}
void changeRating(const string&food,int newRating) {
auto&foodinfo=foodrate[food];
const string&cuisine=foodinfo.first;
int prevrate=foodinfo.second;
cuisinerate[cuisine][prevrate].erase(food);
if(cuisinerate[cuisine][prevrate].empty())
cuisinerate[cuisine].erase(prevrate);
cuisinerate[cuisine][newRating].insert(food);
foodinfo.second=newRating;
}
string highestRated(const string&cuisine) {
const auto&ratingSet=cuisinerate[cuisine];
if(!ratingSet.empty()) {
const auto&foodSet=ratingSet.rbegin()->second;
if(!foodSet.empty()) {
return *foodSet.begin();
}
}
return "null";
}
};
/**
* Your FoodRatings object will be instantiated and called as such:
* FoodRatings* obj = new FoodRatings(foods, cuisines, ratings);
* obj->changeRating(food,newRating);
* string param_2 = obj->highestRated(cuisine);
*/