Support follow & unfollow, getFollowers, getFollowings.
Have you met this question in a real interview?
Yes
Example
follow(1, 3)
getFollowers(1) // return [3]
getFollowings(3) // return [1]
follow(2, 3)
getFollowings(3) // return [1,2]
unfollow(1, 3)
getFollowings(3) // return [2]
class FriendshipService {
public:
map<int, set<int>> follower;
map<int, set<int>> following;
FriendshipService() {
// initialize your data structure here.
}
// @param user_id an integer
// return all followers and sort by user_id
vector<int> getFollowers(int user_id) {
// Write your code here
return vector<int>(follower[user_id].begin(), follower[user_id].end());
}
// @param user_id an integer
// return all followings and sort by user_id
vector<int> getFollowings(int user_id) {
// Write your code here
return vector<int>(following[user_id].begin(), following[user_id].end());
}
// @param from_user_id an integer
// @param to_user_id an integer
// from user_id follows to_user_id
void follow(int from_user_id, int to_user_id) {
// Write your code here
follower[from_user_id].insert(to_user_id);
following[to_user_id].insert(from_user_id);
}
// @param from_user_id an integer
// @param to_user_id an integer
// from user_id unfollows to_user_id
void unfollow(int from_user_id, int to_user_id) {
// Write your code here
follower[from_user_id].erase(to_user_id);
following[to_user_id].erase(from_user_id);
}
};