#include #include #include #include class MapUpdater { public: std::map data; // 初始化:预建立迭代器缓存(只执行一次) void init(const std::vector &ordered_keys) { // 先插入所有 key(确保存在) for (const auto &key : ordered_keys) { data[key] = 0.0; } // 预缓存迭代器 iter_cache.reserve(ordered_keys.size()); for (const auto &key : ordered_keys) { iter_cache[key] = data.find(key); } ordered_keys_ = ordered_keys; } // 高效更新(每 50ms 调用):无需查找,直接写值 void update(const std::string &key, double value) { auto it = iter_cache.find(key); if (it != iter_cache.end()) { it->second->second = value; } } // 按固定顺序刷新全部(批量模式) void refresh_all(const std::vector &values) { for (size_t i = 0; i < ordered_keys_.size(); ++i) { iter_cache[ordered_keys_[i]]->second = values[i]; } } // 按固定顺序遍历 void for_each_ordered(std::function fn) { for (const auto &key : ordered_keys_) { fn(key, data[key]); } } private: std::vector ordered_keys_; std::unordered_map::iterator> iter_cache; };