-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2353_Design_a_food_rating_system.txt
More file actions
39 lines (39 loc) · 1.41 KB
/
2353_Design_a_food_rating_system.txt
File metadata and controls
39 lines (39 loc) · 1.41 KB
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
class Food {
public:
int foodRating;
string foodName;
Food(int foodRating, string foodName) {
this->foodRating = foodRating;
this->foodName = foodName;
}
bool operator<(const Food& other) const {
if (foodRating == other.foodRating) { return foodName > other.foodName; }
return foodRating < other.foodRating;
}
};
class FoodRatings {
unordered_map<string, int> foodRatingMap;
unordered_map<string, string> foodCuisineMap;
unordered_map<string, priority_queue<Food>> cuisineFoodMap;
public:
FoodRatings(vector<string>& foods, vector<string>& cuisines, vector<int>& ratings) {
for (int i = 0; i < foods.size(); ++i) {
foodRatingMap[foods[i]] = ratings[i];
foodCuisineMap[foods[i]] = cuisines[i];
cuisineFoodMap[cuisines[i]].push(Food(ratings[i], foods[i]));
}
}
void changeRating(string food, int newRating) {
foodRatingMap[food] = newRating;
auto cuisineName = foodCuisineMap[food];
cuisineFoodMap[cuisineName].push(Food(newRating, food));
}
string highestRated(string cuisine) {
auto highestRated = cuisineFoodMap[cuisine].top();
while (foodRatingMap[highestRated.foodName] != highestRated.foodRating) {
cuisineFoodMap[cuisine].pop();
highestRated = cuisineFoodMap[cuisine].top();
}
return highestRated.foodName;
}
};