#pragma once #include #include #include struct VarsCache { public: void init(const std::vector &tags, size_t _pv_num = 6) { m_tags = tags; tag_num = tags.size(); pv_num = _pv_num; // 预分配所有 key p_keys.resize(tag_num); tag_keys.resize(tag_num); pv_keys.resize(tag_num); // 每个元素是 pv_num 个 key 的数组 for (size_t i = 0; i < tag_num; ++i) { auto &x = tags[i]; int item_index = stoi(x.substr(3)); p_keys[i] = "p" + std::to_string(item_index); tag_keys[i] = "tag" + std::to_string(item_index); // 预分配 pv 滑动窗口的 key pv_keys[i].resize(pv_num); for (int j = 0; j < pv_num; ++j) { pv_keys[i][j] = "pv" + std::to_string(item_index) + "_" + std::to_string(j); } } } void init(size_t _tag_num, size_t _pv_num = 6) { tag_num = _tag_num; pv_num = _pv_num; // 预分配所有 key p_keys.resize(tag_num); tag_keys.resize(tag_num); pv_keys.resize(tag_num); // 每个元素是 pv_num 个 key 的数组 m_tags.resize(tag_num); for (size_t i = 0; i < tag_num; ++i) { int item_index = i + 1; m_tags[i] = "tag" + std::to_string(item_index); p_keys[i] = "p" + std::to_string(item_index); tag_keys[i] = "tag" + std::to_string(item_index); // 预分配 pv 滑动窗口的 key pv_keys[i].resize(pv_num); for (int j = 0; j < pv_num; ++j) { pv_keys[i][j] = "pv" + std::to_string(item_index) + "_" + std::to_string(j); } } } std::string dumps() { mix_cc::json js1; js1["tag_num"] = tag_num; js1["pv_num"] = pv_num; js1["p_keys"] = p_keys; js1["tag_keys"] = tag_keys; js1["pv_keys"] = pv_keys; js1["m_tags"] = m_tags; return js1.dump(); } public: size_t tag_num; size_t pv_num; std::vector p_keys; std::vector tag_keys; std::vector> pv_keys; // [tag_index][window_index] std::vector m_tags; };