diff --git a/td/telegram/NotificationManager.cpp b/td/telegram/NotificationManager.cpp index 93f932dc..5d5a3cf5 100644 --- a/td/telegram/NotificationManager.cpp +++ b/td/telegram/NotificationManager.cpp @@ -156,15 +156,15 @@ void NotificationManager::tear_down() { NotificationManager::NotificationGroups::iterator NotificationManager::add_group(NotificationGroupKey &&group_key, NotificationGroup &&group) { + bool is_inserted = group_keys_.emplace(group_key.group_id, group_key).second; + CHECK(is_inserted); return groups_.emplace(std::move(group_key), std::move(group)).first; } NotificationManager::NotificationGroups::iterator NotificationManager::get_group(NotificationGroupId group_id) { - // TODO optimize - for (auto it = groups_.begin(); it != groups_.end(); ++it) { - if (it->first.group_id == group_id) { - return it; - } + auto group_keys_it = group_keys_.find(group_id); + if (group_keys_it != group_keys_.end()) { + return groups_.find(group_keys_it->second); } return groups_.end(); } @@ -207,6 +207,8 @@ NotificationManager::NotificationGroups::iterator NotificationManager::get_group } void NotificationManager::delete_group(NotificationGroups::iterator &&group_it) { + bool is_erased = group_keys_.erase(group_it->first.group_id); + CHECK(is_erased); groups_.erase(group_it); } diff --git a/td/telegram/NotificationManager.h b/td/telegram/NotificationManager.h index 4ca8cfb3..da258250 100644 --- a/td/telegram/NotificationManager.h +++ b/td/telegram/NotificationManager.h @@ -186,6 +186,7 @@ class NotificationManager : public Actor { std::unordered_set running_get_chat_difference_; NotificationGroups groups_; + std::unordered_map group_keys_; std::unordered_map>> pending_updates_;